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/