java - 错误代码 : Why is this dangerous?

标签 java sql security sql-injection

Possible Duplicate:
Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?

     String badInput = rawInput.replace("'","''");
     ResultSet rs = statement.executeQuery("SELECT * FROM records WHERE col1 = '"+badInput+"'";

有什么方法可以对这段代码进行类似“Bobby Tables”的攻击吗?

最佳答案

根据所有必须解释命令的过程中的不同步骤,可能有一些可能性传递 %27 (例如)并让它充当单引号,不被注意地传递通过你的替换。

但是即使可以涵盖所有这些情况,并且对于这一个问题实际上是安全的,它的不足之处在于它不能统一执行。其他人可能会出现并想要添加 AND int1 = var1,并注意到您已经考虑过 SQL 注入(inject),因此他们只是按照您的确切方式修改代码

String badInput = rawInput.replace("'","''");
String badInteger = rawInteger.replace("'","''");
ResultSet rs = statement.executeQuery("SELECT * FROM records WHERE" +
 "int1 = " + badInteger + " OR col1 = '"+badInput+"'");

...只有整数,它不再是你想要保护自己的引号!在这里,很明显任何事情都可能出错。因此,虽然这是一个需要有人实现得不好的问题,但我认为这是设计中最大的问题——它只涵盖了一小部分情况。

最好只说“以下是一个变量。无论它包含什么,都将其视为一个值,并且不要尝试将其部分用作代码并执行该代码。”

p>

关于java - 错误代码 : Why is this dangerous?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265391/

相关文章:

java - 服务器启动期间,index::error 处缺少 IN 或 OUT 参数?

mysql - 在一个查询中计算 mysql 中按 user_id 分组的多个表的不同总数

php - 将两个日期分成几个时期

security - 软件开源是否会使其变得脆弱?

c#在线编译执行安全问题

java - Gson - 序列化时避免不必要的包装类

java - 交互 LinkedList 时的 Null 检查抛出 NullPointerException

javascript - Javascript 中的 XXE 漏洞

java - 在一个 JPG 文件中导出多张图像

mysql - 如何在 MySQL 中对从开始到指定日期的总计进行 SELECT?