我想用 Java 或 C# 等语言创建 SQL 查询。大家都知道你不能这样做:
sql = "SELECT * FROM T WHERE A='" + someString + "'"
因为这允许代码注入(inject),例如:
someString = "xxx';DROP TABLE T;DECLARE @A CHAR(3) ='xxx"
众所周知,您必须使用大多数语言中可用的标准 API 提供的正确 SQL 参数。
但是由于某种太复杂而无法解释的原因(请假设我的理由是好的),我不能或不想使用正确的参数,并且需要坚持自己格式化字符串的危险方法。
我的问题很简单。以下安全吗:
sql = "SELECT * FROM T WHERE A='" + someString.Replace("'","''") + "'"
如果您认为这取决于 RDBMS,请坚持使用 MySQL。
最佳答案
根本就不是。
我什至不会尝试创建一些可行的修改或建议,因为这是一个失败的案例。其中任何一个都会让你陷入虚假的安全感。
让我给您一个简短的链接列表来介绍您自己:
...检查“If 语句”或“不带引号的字符串”部分
以及各种SO问题:
What's the best method for sanitizing user input with PHP?
Which characters are actually capable of causing SQL injection in mysql
Does eliminating dangerous characters avoid SQL-injection?
How can I prevent SQL injection in PHP?
Does this code prevent SQL injection?
What characters have to be escaped to prevent (My)SQL injections?
Do htmlspecialchars and mysql_real_escape_string keep my PHP code safe from injection?
关于mysql - 这种 SQL 字符串格式化方法对于代码注入(inject)是否完全安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52853374/