写给ASP.NET程序员:网站WebSite中的安全问题来源: 发布时间:星期五, 2009年2月20日 浏览:142次 评论:0
="t18"> 在网络经常看到网站WebSite被挂马、主页被修改新闻其实这些问题可能是多方面服务器网站WebSite等等但是现在溢出已经被人们重视和服务器不断完善服务器系统漏洞也不是那么容易发掘当然也要保证第 3方软件Software安全
做项目也有段时间了在中也遇到很多安全方面问题也该整理总结下了这个项目是个CMS系统系统是用ASP.NET做开发时候发现微软做了很多安全措施只是有些新手员不知道如何开启下面我通过几个方面简单介绍: 1:SQL 注入 2:XSS 3:CSRF 4:文件上传 1:SQL 注入 引起原因: 其实现在很多网站WebSite中都存在这种问题就是中直接进行SQL语句拼接可能有些读者不太明白下面通过个登录时对用户验证来介绍说明: code: 验证时sql语句: select * from where user='"+txtUsername.Text+"' and pwd='"+txtPwd.Text+"' 这是段从数据库中查询用户对用户名密码验证 看上去好象没有什么问题但是实际这里面浅藏着问题用户名:admin 密码: admin select * from where user='admin' and pwd='admin' 如果用户和密码正确就可通验证如果我用户名:asdf' or 1=1 -- 密码:随意输入. 我们再来看语句: select * from where user=‘asdf' or 1=1 -- and pwd='' 执行后看到什么?是不是所有记录如果只是简单判断返回条数这种思路方法就可以通验证 如果执行语句是SA用户再通过xp_cmdshell添加系统管理员那么这个服务器就被拿下了 解决思路方法: (1):这个问题主要是由于传入特殊引起我们可以在对输入用户名密码进入过滤特殊处理 (2):使用存储过程通过传入参数思路方法可解决此类问题(注意:在存储过程中不可使用拼接实现不然和没用存储过和是样) 2:XSS(跨站脚本攻击) 引起原因: 这个也有时被人们称作HTML注入和sql注入原理相似也是没有特殊进行处理是用户可以提交HTML标签对网站WebSite进行重新构造其实在默认情况下在asp.net网页中是开启validateRequest属性所有HTML标签后会.NET都会验证: 但这样直接把异常抛给用户多少用户体验就不好 解决思路方法: (1):通过在 Page 指令或 配置节中设置 validateRequest=false 禁用请求验证然后我们对用户提交数据进行HtmlEncode,编码后就不会出现这种问题了(ASP.NET 中编码思路方法:Server.HtmlEncode()) (2):第 2种是过滤特殊这种思路方法就不太提倡了如果用户想输入小于号(<)也会被过滤掉. 3:CSRF(跨站点请求伪造) 引起原因: 个人认为csrf在Ajax盛行今天来说倒是方便了它可以在你不知道情况用你通过验证用户进行操作所以也被称为浏览器劫持如果你已通过某个网站WebSite验证那么你将以你角色对网站WebSite进行操作比如你是管理员可以添加其它用户到管理组但是如果有人构造了添加管理员链接被管理员点后也会执行相应操作. 解决思路方法: 在lake2文章中也提出了就是修改信息时添加验证码或添加Session令牌(ASP.NET中已经提供个自动防范思路方法就是用页面属性ViewStateUserKey.在Page_Init思路方法中设置其值this.ViewStateUserKey=Session.SessionID) 出处:www.csdn.net 1
相关文章读者评论发表评论 |