什么是Cross-Site Scripting Attack?
===================
攻击者制造一个网站, 受害用户访问该网站后, 其浏览器客户端收到恶意的脚本代码. 受害用户的浏览器之后会运行该脚本代码. 由于浏览器是从一个trusted site下载的脚本, 从而浏览器不可能识别这个代码是否合法, 并且Microsoft IE Security Zone也不能提供保护. 这种攻击可以在HTTP和HTTPS的连接上进行.
cross-site scripting attack的最严重的例子之一就是当攻击者书写脚本来获得能够提供对某个站点访问权限的authentication cookie, 然后把这个cookie发送给攻击者知道的一个web地址. 这就使得攻击者可以伪装成合法用户的身份对站点进行非法访问.
使得你的web application易受到cross-site script攻击的弱点包括:
- 对用户的输入没有限制和验证
- 没有对输出进行encode
- 对从一个共享数据库中获取的数据采取信任态度
应对之策
有两条重要的对策
1. 对输入进行限制(Constrain input).
2. 对输出进行Encode.
HTML encode会把对HTML有特殊含义的字符替换成HTML-to-HTML的代表这些特殊字符的变量. 比如说 < 被替换成< 比如说 " 被替换成".
Encod了的数据不会引发浏览器执行代码, 取而代之的是仅仅把这些字符作为无害的HTML来显示.
对于更多如何在普通的asp.net应用程序中应对这种攻击, 请看这里(How To: Prevent Cross-Site Scripting in ASP.NET).
SharePoint 2010
===================
对SharePoint 2010而言, SharePoint本身是对这种攻击已经有防御措施, 对于开发者而言, 有如下的一些要点需要注意.
- Encode Output Properly Using SPHttpUtility Methods
- Never Allow Contributor Users to Add Script to the Site
- Always Set a Charset in the Content-Type HTTP Response Header
- Do Not Allow User Provided Values in Style and Event Attributes
更多细节, 请参考Security Best Practices for Developers in SharePoint 2010中针对Cross-Site Scripting的部分.
参考资料
Security Best Practices for Developers in SharePoint 2010
http://msdn.microsoft.com/en-us/library/gg552614.aspx
How To: Prevent Cross-Site Scripting in ASP.NET