【Frontend Knowlodge Chart】 学习之安全相关

安全相关

考查前端及系统安全方面的知识,需要对各种攻击手段和防范措施有基本的了解。

知识点

  • HTML转义符号、脚本转义符号。
参见百度百科:http://baike.baidu.com/view/73.htm
  • 常见的XSS漏洞,及其避免方式。
Xss(跨站脚本攻击),简单来说,就是让不支持富文本的区域支持了富文本的执行,例如blog的标题是不支持富文本的,但由于页面显示时没去做处理,导致了可以在标题中嵌入像文本加粗、变颜色等等的普通HTML,当然,攻击者也就可以嵌入恶意的javascript了,例如获取你在当前网站的cookie的javascript:document.cookie等等,另外一种就是支持富文本的区域没有去过滤一些恶意的javascript。
常见的XSS攻击手法:
1、依赖跨站漏洞,需要在被攻击网站的页面种入XSS脚本的手法
    a. Cookie 盗取,通过javascript 获取被攻击网站种下的cookie,并发送给攻击者。
  • 从cookie 中提取密码等隐私
  • 利用cookie 伪造session,发起重放攻击
    b. Ajax 信息盗取,通过javascript 发起ajax 请求。
  • 从ajax 结果中获取隐私。
  • 模拟用户完成多页表单。
2、不依赖跨站漏洞的XSS攻击手法
    a. 单向HTTP 动作,通过img.src 等方法发起跨站访问,冒充被攻击者执行特权操作。但是很难拿到服务器的返回值。
    b. 双向HTTP 动作,如果服务器产生一段动态的script,那么可以用script.src 的方法发起跨站访问并拿到服务器的返回值。

所谓知己知彼百战不殆,看看黑客教程能更好的了解这方面内容:

避免方式:
  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。
淘宝QA Team也有专门一片检验XSS漏洞的文章:
  • 常见的其他安全攻击方式,及其应对措施。
先引一篇文章,留着慢慢看。。。。

"中间人"攻击:前端很难防御。。。。。
  • 与flash交互过程中的安全事项。

常见问题

  • 有一段用户输入的文字,现在要通过一定的方法显示在一个id为output的div元素中,请问如何做?
比如,我在一个textarea中输入<input type="text" value="">,然后点击提交把它放入div中,此时如果不做任何处理,div中会出现一个输入框,而不是文字。因此,在输出之前,要用js的内置方法encodeURIComponent(),将输入串转义,然后输出。
  • 请问什么是XSS漏洞?从你的角度看,HTML片段中有哪些关键字可能导致输出后会执行一段javascript脚本?
就常见的是在一个input中输入"><script>alert(document.cookie);</script>这样的字符串,之后与原来的input标签组合,就变成 <input type="text" value=""><script>alert(document.cookie);</script> >,这样script就被执行了。
效果图:
【Frontend Knowlodge Chart】 学习之安全相关
 
一般会导致脚本执行的关键字有“script”,“iframe”,”<”,”>”,”;”,”’”等。
简单的防御方法是把这些输入都encode,代码如下:
encodeJsonString: function(str) {
        var a = [[/"/g, '\"'], [/</g, '&lt;'], [/>/g, '&gt;'], [/'/g, "\'"], [/\//g, '/'], [/\\/g, '\\']];
        var s = str;
        if (typeof str == 'string') {
            for (var i = 0; i < a.length; i++) {
                s = s.replace(a[i][0], a[i][1]);
            }
        }
        return s;
    },
 
这样转义后在输出到dom中,就不会有上面的js运行情况了。

引一篇简单描述XSS攻击实例的文章: http://coderblog.me/2011/04/xss攻击案例分析之——我是2b状态/


  • 如何防止flash在页面中执行javascript呢?

你可能感兴趣的:(前端,安全,xss)