日期:2014-05-17  浏览次数:20591 次

sql防注入问题
如果程序中sql语句不使用参数。
直接拼接,但我能确保sql语句中做为查询的条件是不会包含空格。
比如 

Select id ,name,add From users where name = '';

其中的name是不能保护空格的。
我在拼接sql语句的时候,
得到name的字符串进行处理把所有空格都去掉,这样能不能防止sql注入?
如何输入的是: 
1' or 1=1 or '1'='1
处理之后变成
1'or1=1or'1'='1
貌似不会被注入吧
------最佳解决方案--------------------
去掉空格 只是防止注入的一个开始。
如果这样呢?
Select id ,name,add From users where name = '';drop table users;drop database XXX;--'
不就杯具了,参数是比较可靠且简便的防注入,建议使用。
------其他解决方案--------------------
前端要预处理一些特殊字符,如--等,然后使用非动态sql。可以考虑使用存储过程以参数方式传入。另外可以考虑先加密再传入,这样也能减少注入的风险。
------其他解决方案--------------------
引用:
';drop table users;drop database XXX;--
去掉空格能执行?
';droptableusers;dropdatabaseXXX;--
不能
------其他解决方案--------------------
引用:
引用:
前端要预处理一些特殊字符,如--等,然后使用非动态sql。可以考虑使用存储过程以参数方式传入。另外可以考虑先加密再传入,这样也能减少注入的风险。
这个是肯定的,我只是在假如。
例如C#里



C# code



123

string sql ="Select id ,name,add From users where ……
按目前遇到的情况就不会,毕竟我不是专注攻击,没有太多的攻击方案。但是全部空格去掉的话,问题又来了,万一别人不打算攻击,而是正常使用,那说不定你就会使得别人登录失败之类的情况。
------其他解决方案--------------------
引用:
引用:
按目前遇到的情况就不会,毕竟我不是专注攻击,没有太多的攻击方案。但是全部空格去掉的话,问题又来了,万一别人不打算攻击,而是正常使用,那说不定你就会使得别人登录失败之类的情况。
我的前提条件就是确保sql语句中做为查询的条件是不会包含空格。
也就是正常的这些做为条件数据是不含有空格的
但是这样,就拿你上面那个例子,除非你业务上规定了不能这样,不然我注册name的时候使用:发 粪 涂 墙,这一步如果你通过了,那么下次我登录的时候你就不能去掉空格,所以业务方面你也要考虑一下
------其他解决方案--------------------

推荐贴讲的很清楚了  楼主把推荐贴再看几遍  1到100楼都看下
------其他解决方案--------------------
感兴趣的话可以去谷歌关于这方面的东西学习一下
------其他解决方案--------------------
拼接也没有关系啊;
提交数据前你过滤掉诸如   Drop、1=1、单引号(此类特殊标点符号)、……之类的文字不就OK了……

------其他解决方案--------------------
直接过滤'为''就可以了,
前提是这个要放在一对''里面
------其他解决方案--------------------
去掉空格


单引号改双引号
------其他解决方案--------------------
';drop table users;drop database XXX;--
去掉空格能执行?
';droptableusers;dropdatabaseXXX;--
------其他解决方案--------------------
引用:
前端要预处理一些特殊字符,如--等,然后使用非动态sql。可以考虑使用存储过程以参数方式传入。另外可以考虑先加密再传入,这样也能减少注入的风险。

这个是肯定的,我只是在假如。
例如C#里


string sql ="Select id ,name,add From users where name = '{0}';"
db.GetData(string.Formart(sql,txtName.Text.Replace(" ", "")));

这样会造成注入吗?
------其他解决方案--------------------
引用:
按目前遇到的情况就不会,毕竟我不是专注攻击,没有太多的攻击方案。但是全部空格去掉的话,问题又来了,万一别人不打算攻击,而是正常使用,那说不定你就会使得别人登录失败之类的情况。

我的前提条件就是确保sql语句中做为查询的条件是不会包含空格。