用了参数化和存储过程还是有注入现象。
想到一个办法。大家看可行不可行?
用2个SQL用户分别给不同的权限。
打个比方:
A用户只能select,用在前台(也就是普通用户能看到的页面)。
而B用户能select,update,INSERT和Delete,用在后台管理页面(后台管理页面是要验证用户的)。这样可行不?
想到一个办法。大家看可行不可行?
用2个SQL用户分别给不同的权限。
打个比方:
A用户只能select,用在前台(也就是普通用户能看到的页面)。
而B用户能select,update,INSERT和Delete,用在后台管理页面(后台管理页面是要验证用户的)。这样可行不?
解决方案 »
- 用虚拟主机发布.NET网站
- 有没有好用的前台编辑器?给会员用户用的.FCK太强大.
- 在aspx页面事件中获取客户端表单的数据
- 水晶报表里面自造字问题,急!急!急!
- 请问为什么TEXTBOX从数据库直接获得数据,缺不能修改
- ZPL指令打印
- could not find the visual sourcesafe internet web service connection information
- 请教一个关于生成excel的问题,~在线等候~ 不搞定不吃饭
- 在datagrid中绑定一个多表联结的select语句后,如何使用update的存储过程. (c#.net)
- 关于跨域请求天气预报数据问题,各位大神来看下
- GridView按下方向键上下键选择数据行时,如何让数据保持在屏幕之内?
- 开发一个asp.net 网站要多少时间
在数据库系统本身没有bug的前提下(事实上你也几乎遇不到,可以视作没有),应该不会出现这样的情况。
你要找到问题的原因,重现这样的bug,比如说什么查询,什么用户输入下发生了攻击,如果你没有办法知道这一点,添加完备的日志先观察下。防止sql注入不能解决所有问题,还可能的攻击方式包括跨站攻击、脚本、上传漏洞、伪造用户身份等等。
DECLARE @_Sql NVARCHAR(4000);SET @_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;
这也是动态(参数化)sql和拼接sql最大的区别,
也是为什么这个语句可以放入执行计划的原因(而不是每次都要编译)