当前位置:   article > 正文

#{} 和 ${} 及SQL注入_$和#占位符 sql注入

$和#占位符 sql注入

#{} 和 ${}

#{}

  • 执行SOL时,会将#{···}替换为?,生成预编译SQL,会自动设置参数值

  • 使用时机:参数传递,都适用#{···}
  • #{}占位符常见于诸如MyBatis等SQL框架中,用于参数的预编译和安全过滤。它会将占位符#{}中的内容作为一个参数占位符(?),并在查询执行之前将参数进行替换和预编译。这种方式可以防止SQL注入攻击,并提供更高的安全性。

${}

  • 拼接SQL,直接将参数拼接在SQL语句中,存在SQL注入问题。
  • 使用时机:如果对表名、列名进行动态设置时使用
  • ${}占位符是直接进行文本替换的,不进行参数的预编译和安全过滤,存在潜在的安全风险

 关于Sql注入

SQL注入通常发生在Web应用程序中,因为Web应用程序通常使用SQL查询来与数据库交互。攻击者可以通过在Web应用程序的输入字段中注入恶意的SQL语句来利用这种漏洞。为了防止SQL注入攻击,开发人员应该使用参数化查询或存储过程来执行SQL查询,而不是直接将用户输入的数据拼接到SQL查询中。

例如:

String sql="select * from user where account= ’ " + account + " ’ and password=’ " +password+ " ’ "
输入123和456
sql就变成: select * from user where account = ‘123’ and password = ‘456’
这个没问题,要不查询成功,要不失败

但如果他输入 ’ or 1=1 # 和 456
sql就变成: select * from user where account = ‘’ or 1=1 #’ and password = ‘456’
#在sql中表示注释,所以系统执行的是: select * from user where account =‘’ or 1=1
1=1一定成立,所以这个sql一定成功,登录就危险了

比如输入 ’ or 1=1 ; drop database 数据库名称 # : 可以导致删库

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/401940?site
推荐阅读
相关标签
  

闽ICP备14008679号