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。可以考虑使用存储过程以参数方式传入。另外可以考虑先加密再传入,这样也能减少注入的风险。
------其他解决方案--------------------不能
------其他解决方案--------------------按目前遇到的情况就不会,毕竟我不是专注攻击,没有太多的攻击方案。但是全部空格去掉的话,问题又来了,万一别人不打算攻击,而是正常使用,那说不定你就会使得别人登录失败之类的情况。
------其他解决方案--------------------但是这样,就拿你上面那个例子,除非你业务上规定了不能这样,不然我注册name的时候使用:发 粪 涂 墙,这一步如果你通过了,那么下次我登录的时候你就不能去掉空格,所以业务方面你也要考虑一下
------其他解决方案--------------------
推荐贴讲的很清楚了 楼主把推荐贴再看几遍 1到100楼都看下
------其他解决方案--------------------感兴趣的话可以去谷歌关于这方面的东西学习一下
------其他解决方案--------------------拼接也没有关系啊;
提交数据前你过滤掉诸如 Drop、1=1、单引号(此类特殊标点符号)、……之类的文字不就OK了……
------其他解决方案--------------------直接过滤'为''就可以了,
前提是这个要放在一对''里面
------其他解决方案--------------------去掉空格
单引号改双引号
------其他解决方案--------------------';drop table users;drop database XXX;--
去掉空格能执行?
';droptableusers;dropdatabaseXXX;--
------其他解决方案--------------------
这个是肯定的,我只是在假如。
例如C#里
string sql ="Select id ,name,add From users where name = '{0}';"
db.GetData(string.Formart(sql,txtName.Text.Replace(" ", "")));
这样会造成注入吗?
------其他解决方案--------------------
我的前提条件就是确保sql语句中做为查询的条件是不会包含空格。