今日Web安全指南学习笔记(XSS续昨日笔记)

补充一下昨天没说的一部分XSS攻击手段

script元素中的XSS

当script中一部分JavaScript是动态生成时,因为script不能解释Tab和字符实体

所以无需进行html转义,只需要对JavaScript转义

比如下面这段代码

 

但是,若是输入值中包含</script>这个标签时,</script>会被当成JavaScript的结束符

游览器只会将<script></script>中间的代码传递给JavaScript引擎处理

此时,若是在script元素处理的代码中插入一条</script><script>alert(document.cookie)//

script字面量会被迫终结,然后继续执行后面恶意插入的JavaSript

所以,动态生成JavaScript字符串字面量需要遵循以下规则

按照JavaScript语法,将引号(单双),斜杠及换行符等进行转义

即在前面加上一个\

若是事件绑定函数,在上述执行结果进行html转义后,用双引号括起来

若是script元素,确保执行结果生成的字符串不存在</

但是JavaScript转义规则相当复杂,执行起来可能有所疏漏,所以有以下两种处理方法

Unicode转义

为了规避JavaScript动态生成带来的风险,可以将除字母和数字外所有字符都进行转义

这是利用了JavaScript代码能将.U+XXX转义为\uXXX的功能

转义代码如下,由于教材问题,最下面有一条代码显示不全

这里也不对点号和减号做转义,因为不会对安全性有影响

 

这里图个方便,脚本解释我直接发截图上来

JavaScript引用定义在script元素外的方法

除了这个Unicode转义外,也可以引用定义在script元素外的参数

这样也能避免被</script>强行终止script元素字符串字面量

该方案实施需要利用到hidden参数,示例代码如下

第一行代码中也有部分未显示完全

开头的input元素指定了id,使其能够被引用

并且,根据属性值转义规则,使用htmlspecialchars函数转义后用双引号括起来

而后,input的值在倒数第二行被getElementById方法引用

此方法的优势在于不用遵循JavaScript繁琐的问题,仅用少量的规则就能防范XSS

但由于定义JavaScript代码与参数间隔较远,在实际使用中,比较影响可读性

 

然后,是一种被称作"DOM based XSS"的XSS

JavaScript常用于客户端的显示处理,而隐患也在此

如下

 

我们这里对URL做出修改

http://example.jp/43-011.html?name=<script>alert(document.cookie)</script>

攻击者注入的JavaScript代码不会出现在服务器端生成的html中,因此这类XSS被称作"DOM based XSS"

所以,即使部分显示使用JavaScript也要考虑其中是否会包含HTML标签

JavaScript标准函数中没有提供HTML转义的功能

我们这边可以使用jQuery这个JavaScript库来示范字符串的显示,代码如下

使用span元素确定字符串的显示位置,然后向id指定的DOM中插入文本文字,然后用text方法自动转义

开发博客系统或SNS网站时,可能是要允许用户使用自定义CSS或HTML标签的

但这样会带来很大得到XSS风险

一旦允许输入HTML标签,用户就能使用script元素或事件绑定函数执行JavaScript

同理,在CSS中使用experssion功能也能执行JavaScript

所以,最好的方法还是使用能够解析HTML文本语法结构的第三方数据库

比如PHP中的HTML Purifier

最后,一部分错误消息显示,可能会导致信息泄漏

这边要修改报错提示,显示出来的错误提示只有大概,而详细内容保存在日志中

PHP中禁止显示详细错误信息,在php.ini中修改属性

display_errors = off

总结

这边介绍的XSS漏洞,产生的主要原因是显示的方法存在问题

所以第一步,需要生成正确的HTML

后面再来补是很麻烦的一件事,所以最好一开始就编写正确的代码来杜绝XSS漏洞

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值