我想用java或c#之类的语言创建sql查询。每个人都知道你不能这样做:
sql = "SELECT * FROM T WHERE A='" + someString + "'"
因为这允许代码注入,例如:
someString = "xxx';DROP TABLE T;DECLARE @A CHAR(3) ='xxx"
大家都知道,您必须使用大多数语言中可用的标准api提供的正确sql参数。
但是由于某些太复杂而无法解释的原因(请假设我的理由是好的),我不能或不想使用正确的参数,需要坚持自己格式化字符串的危险方法。
我的问题很简单。以下是否安全:
sql = "SELECT * FROM T WHERE A='" + someString.Replace("'","''") + "'"
如果您认为这取决于rdbms,请坚持使用mysql。
2条答案
按热度按时间tct7dpnv1#
甚至不可能。
我甚至不打算尝试创建一些可行的修改或建议,因为这是一个失败的案例。他们中的任何一个都会让你陷入错误的安全感。
让我给你一个小的链接列表来介绍你自己:
sql注入备忘单
... 勾选“if语句”或“不带引号的字符串”部分
鲍比table
以及各种各样的问题:
用php清除用户输入的最佳方法是什么?
在mysql中,哪些字符能够导致sql注入
消除危险字符可以避免sql注入吗?
如何防止php中的sql注入?
此代码是否阻止sql注入?
为了防止(我的)sql注入,必须转义哪些字符?
htmlspecialchars和mysql\u real\u escape\u string能保证我的php代码不被注入吗?
kcrjzv8t2#
首先,这是个坏习惯。
我认为有两种情况是不好的:
如果字段不是
VARCAHR
是的INT
? 这行不通。如果输入为
"it's ok"
,一定会的"it"s ok"
,如果要显示用户名,则转换将非常繁琐。你的方法会有更多的问题(但我没有考虑)。最好的方法是使用参数。