最近公司的网站需要提高安全性。防止用户的恶意攻击。
分为几种攻击
1.XSS跨站脚本攻击.
2.SQL注入攻击.
以前没觉得web可以这么轻易的被攻击。用Netsparker工具扫描了一下网站发现sql注入和跨网脚本攻击.(这个软件可以通过http://www.mavitunasecurity.com/communityedition/这个网址下载).主要是由几方面原因引起的:
1.前端和后端的输入验证不够规范统一及完整.
2.对于用户输入的数据完全信任是危险的,没有编码和过滤一些恶意字符。
例如访问这样一个网址: /product/productSearch.aspx? ?coid=3&pmid=D710%20(Epic%204G%20Touch)&kw=%22%2Balert(9)%2B%22&IsPromotion=0
第三个参数kw因为在URL中显示的是编码后的,参数的实际值是”+alert(9)+”.
productSearch.aspx页面,参数值传过来没有经过hmtl编码。后端C#程序一个类变量searchkw被赋值”+alert(9)+”.
页面前端执行了如下一段js代码
<script type="text/javascript">
getNews("searchDisplay.aspx?pcid=<%=currentPcid %>&pmid=<%=pmid %>&coid=<%=coid %>&psid=&counter=<%=currentCount %>&kw=searchkw%>&isPromotion=<%=isPromotion %>", "searchDiv1");
</script>
这样的话”+alert(9)+”的第一个双引号把前面的代码都截断了,第二个双引号把后面的都截断了。中间就只剩下alert(9), 便会执行alert(9)这句代码。这句代码可以替换成任意有攻击性的javascript代码段,比如获取cookie的值x=document.cookie;然后提交给攻击者.
我的解决办法是通过使用微软的一个工具AntiXssLibrary.dll来编码该参数的值.这个工具可以去这个网站下载http://wpl.codeplex.com/,这是个开源项目.
这里有一个msdn参考的文档:http://msdn.microsoft.com/en-us/library/aa973813.aspx
3.数据库查询没有使用asp.net中安全的参数化操作.
现在为了解决这几个问题,有以下三步需要做.
1.对于数字类型的参数值、用户输入的部分前端和后端都需要验证数据类型的正确性.
2.对于字符串类型的参值或者用户输入的部分后端通过使用AntiXssLibrary.dll来编码字符串.
3.所有SQL语句中拼接字符串的全部使用SqlParameter类封装传入SQL的参数.