web应用安全 2.5XSS进阶

HTML转义主要对HTML起作用,对javascript脚本不起作用。 单引号在脚本参数里依然被认为是单引号,转义后被认为是转义后的单引号

属性值(URL)

onload 脚本(事件绑定)的参数
JavaScript脚本定义的里面能被客户输入的话也会存在问题

XSS进阶:HTML转义概要

属性值(URL)

	a元素的href属性、img元素、frame元素、iframe元素的src属性等
	如果属性中URL的值是由外界传入的话,外界就能够使用javascript:JavaScript代码形式(javascript协议)的URL执行javascript代码
	解决方案:
		当URL由程序动态生成时,需要对其进行校验,仅允许http和https
		协议。此外,通过校验的URL还需要作为属性值进行HTML转义
			具体来说,URL需满足以下两个条件中的一个。
			以http:或https:开头的绝对URL
			以/开头的相对URL

事件绑定函数

	解决方法
		先写一个对javascript进行转义的函数,再对客户输入的内容进行javascript的转义,最后再对javascript转义后的内容进行HTML转义
script元素中的字符串变量
	理论上讲只需要做javascript转义,html转义不需要,HTML转义的内容是给客户看的,script标签的内容客户是看不到的。

js字符串面量动态生成的对策

	动态生成javascript字符串字面量时需要遵循以下规则。
		1、按照JavaScript语法,将引号(单引号及双引号)和斜杠\及换行符等进行转义。"->\" '->\' 换行符->\n \->\\
		2.1、如果是事件绑定函数,将(1)的执行结果按照字符实体进行HTML转义,并用双引号括起来
		2.2、如果是在script元素中,执行(1)后确保字符串中不存在</.
	最好的办法可能就是避免动态生成JavaScript。

解决方案:Unicode转义  前提是编码是UTF-8
	为了规避动态生成JavaScript带来的风险,可以采取将字母和数字以外的所有字符都进行转义的方法
	除了字母,数字,减号和点号 都进行转义

辅助方案:错误消息导致的信息泄露
	在php.ini中做如下设置
		display_errors = Off