请教一个防SQL注入的方法可行不可行。
用了参数化和存储过程还是有注入现象。想到一个办法。大家看可行不可行?
用2个SQL用户分别给不同的权限。
打个比方:
A用户只能select,用在前台(也就是普通用户能看到的页面)。
而B用户能select,update,INSERT和Delete,用在后台管理页面(后台管理页面是要验证用户的)。这样可行不? --------------------编程问答-------------------- 用了参数化和存储过程还是有注入现象。
在数据库系统本身没有bug的前提下(事实上你也几乎遇不到,可以视作没有),应该不会出现这样的情况。 --------------------编程问答--------------------
但是实际情况就是发生了,所以我想请教下我上述的方法可行不? --------------------编程问答--------------------
但是实际情况就是发生了,所以我想请教下我上述的方法可行不?我的思路就是,你黑客不是要攻击吗,我就直接不给普通用户update,INSERT和Delete的权限。 --------------------编程问答-------------------- 注入的根源就是拼串,避免拼串采用参数传递,使其传递数据只当纯数据。楼上方法并不能避免注入,如果采用组串还是可以注入。不知道你说的注入是频繁添加程序,还是指的是程序bug. --------------------编程问答--------------------
你要找到问题的原因,重现这样的bug,比如说什么查询,什么用户输入下发生了攻击,如果你没有办法知道这一点,添加完备的日志先观察下。防止sql注入不能解决所有问题,还可能的攻击方式包括跨站攻击、脚本、上传漏洞、伪造用户身份等等。 --------------------编程问答--------------------
一点也看不出来,不知道你是怎么“认为可行”的,不知道你的道理在哪里。
防止注入,前提是自己会注入。否则你怎么防止?没有针对性而瞎猜各种可能性? --------------------编程问答-------------------- 你写过多少使用sql的程序?你的程序(普通用户)所运行的程序也没有修改数据库的代码吗?有吧!
另外,只读数据库,就不是人家想看的么?如果让任何人随便看银行里所有其它客户的账户等等信息,这算不算泄密?这算不算被人入侵了系统呢?
另外注入之后,例如我们可以去格式化硬盘,或者去获取服务器的登录账号和密码(或者偷偷设置一个),总之有一点功能就行了。谁说黑客都跟那些男脑子只有数据库表“增删改查”的人一个编程档次? --------------------编程问答--------------------
贴出你的存储过程来。
特别是假设里边有exec执行字符串宏命令,那么这种存储过程尽量删除掉。 --------------------编程问答-------------------- 4楼所说的是sql注入的一个重要原因,为随便写个例子供楼主参考:
DECLARE @_Sql NVARCHAR(4000);SET @_Sql='';--------------------编程问答-------------------- 我之前网站也遇到SQL注入 后来采取的方式是 转化字符 --------------------编程问答--------------------
DECLARE @_Name NVARCHAR(100);SET @_Name='甲醇'';SELECT ''看到我,表示注入成功''--';
--使用EXEC SP_EXECUTESQL,动态sql方式,无法注入
SET @_Sql='SELECT TOP 1 * FROM Product
WHERE ProductName1 LIKE ''%''+@Name+''%'';';
--此处用局部变量@_Name 替换了sql参数@Name,可以重复利用sql而不用担心参数命名的冲突
--由于每次提交了相同的sql,只是参数不同,可以自动获得执行计划的性能优势
EXEC SP_EXECUTESQL @_Sql,N'@Name NVARCHAR(100)',@_Name;
--拼接方式,可以注入
SET @_Sql='SELECT TOP 1 * FROM Product
WHERE ProductName1 LIKE ''%'+@_Name+'%'';';
--这里,由于每次提交的sql都不一样,无法利用sql执行计划的优势
EXEC SP_EXECUTESQL @_Sql;