【发布时间】:2010-11-28 16:10:26
【问题描述】:
如果我只是用双引号替换所有传入的单引号,我不确定有人会如何破坏我的 SQL。有人可以为我提供 Oracle 和 SQL Server 示例吗?谢谢。
string sql1 = "select * from users where user_id = '" + "O'Reily".Replace("'", "''").Replace("\", "") + "'";
==> "select * from users where user_id = 'O''Reily'
string sql2 = "select * from users where user_id = '" + "O'''Reily".Replace("'", "''").Replace("\", "") + "'";
==> "select * from users where user_id = 'O''''''Reily"
更新:斜杠“\”是应用程序中的受限字符,在查询中使用之前将被删除。双破折号可以很容易地添加到这个受限字符列表中。
【问题讨论】:
-
单引号的问题不如“--”和“;”。尽可能限制用户文本输入。
-
强制性小鲍比桌:xkcd.com/327
-
Bobby 可以使用这个解决方案。单引号将被转义为双引号,并且永远不会执行 drop。
-
‘--’ 和 ‘;’ 在字符串文字中是没有意义的,当然应该允许。像这样限制任意的事情是迷信:适当地逃避事情,你不需要担心它们;未能正确逃脱,他们不会救你。
标签: sql sql-server oracle tsql plsql