use*_*799 0 sql t-sql sql-server oracle plsql
如果我只是用双引号替换所有传入的单引号,我不确定有人会破坏我的SQL.有人可以启发我的Oracle和SQL Server示例吗?谢谢.
string sql1 = "select * from users where user_id = '" + "O'Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"从user_id ='O''Reily'的用户中选择*
string sql2 = "select * from users where user_id = '" + "O'''Reily".Replace("'", "''").Replace("\", "") + "'";
Run Code Online (Sandbox Code Playgroud)
==>"select*from users user_id ='O''''''Reily"
更新:斜杠'\'是应用程序中的受限字符,在查询中使用之前将被删除.双短划线可以很容易地添加到受限字符列表中.
God*_*eke 16
参数化您的变量.认真.所有现代环境都有这样的设施,您不必担心转义序列,例如\'将转换为您的方案(在Oracle中),这将成为转义报价和常规(终止)报价.
还有很多其他技巧可以解决这个问题,我没有列举,因为它们没有帮助.
再次:参数化您的变量.认真.如果您不学习如何使用参数化,您将成为另一个被黑客入侵的统计数据.
编辑:阅读保罗答案中的链接,这是另一个:http://unixwiz.net/techtips/sql-injection.html
无论你认为你的卫生条件多么聪明,你做错了.特别是如果你必须处理多个后端.
用字符串构建查询是为数不多的让我们解雇的人之一......程序员给公司带来的风险大于他们带到桌面上的任何其他东西(特别是在我们说清楚之后)我们不会在第一天接受这样的代码,并提供一个实体框架,使这些东西变得不必要).