首页 > 程序开发 > XSS攻击防范

XSS攻击防范

2009年4月22日

最近一个朋友找我帮忙修复一个XSS注入漏洞,其实网站也是某上市互联网公司的中国站。现在XSS和CSRF攻击成为一个WEB软件工作者不得不重视的一个问题,很有必要深入研究下。

XSS漏洞很容易在大型网站中发现,在黑客圈内它非常流行。最著名的是2005年黑客Sammy Kamkar在myspace网站发布蠕虫病毒后,XSS就开始大行其道。FBI.gov、CNN.com、Time.com、Ebay、 Yahoo、Apple、Microsoft、Zdnet、Wired、Newsbytes,twitter都有这样那样的XSS漏洞。国内出现过XSS漏洞的网站有sohu,网易邮箱,校内网等,百度和著名电商网站淘宝也曾出现过XSS漏洞。

在商业产品中,平均每个月能够发现10-25个XSS漏洞。

假设你已经了解XSS的基本概念和类型,这里看看如何进行防范。先总结一下常见的XSS攻击手法:

依赖跨站漏洞,需要在被攻击网站的页面种入XSS脚本的手法

Cookie 盗取,通过javascript 获取被攻击网站种下的cookie,并发送给攻击者。
1.从cookie 中提取密码等隐私
2. 利用cookie 伪造session,发起重放攻击
Ajex 信息盗取,通过javascript 发起ajex 请求。
1. 从ajex 结果中获取隐私。
2. 模拟用户完成多页表单。

不依赖跨站漏洞的XSS攻击手法

1. 单向HTTP 动作,通过img.src 等方法发起跨站访问,冒充被攻击者执行特权操作。但是很难拿到服务器的返回值。
2. 双向HTTP 动作,如果服务器产生一段动态的script,那么可以用script.src 的方法发起跨站访问并拿到服务器的返回值。

XSS防范方法

XSS攻击防范主要是有程序漏洞造成的,要完全防止XSS安全漏洞主要依靠程序员较高的编程能力和安全意识,当然一些编程安全原则可以帮助大大减少XSS安全漏洞:

  1. 不信任用户提交的任何内容,对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、REFER、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。尽量采用POST 而非GET 提交表单;对”<”,”>”,”;”,”’”等字符做过滤;任何内容输出到页面之前都必须加以encode,避免不小心把html tag 弄出来。
  2. 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行,对于用户提交信息的中的img 等link,检查是否有重定向回本站、不是真的图片等可疑操作。
  3. Cookie 防盗。避免直接在cookie 中泄露用户隐私,例如email、密码等等;通过使cookie 和系统ip 绑定来降低cookie 泄露后的危险。这样攻击者得到的cookie 没有实际价值,不可能拿来重放。
  4. 确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

PHP方面请参见PHP的安全防范工作

ASP.Net的可以用VS自带的XSSDetect来检测。

要更好的防范XSS和CSRF攻击等,除了加强程序开发的严谨度之外,还需要重视测试工作,通过专业的测试来减少问题发生的可能性,我们看到淘宝QA也重视XSS攻击测试了。

VN:F [1.9.22_1171]
Rating: 6.0/10 (4 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
XSS攻击防范, 6.0 out of 10 based on 4 ratings

程序开发

  1. 泉州房产
    | #1

    这种XSS防范方法有效吗

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. julian
    | #2

    嗯 不错 常用的也只有这几种方法了 但只是从程序方面,也需要结合系统方面来做 就更好了

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  1. 本文目前尚无任何 trackbacks 和 pingbacks.

This blog is kept spam free by WP-SpamFree.