反射型xss是指应用程序通过web请求获取不可信赖的数据,在未检验数据是否存在恶意代码的情况下,便将其传送给了web用户。反射型xss一般由攻击者构造带有恶意代码参数的url,当url地址被打开时,特有的恶意代码参数被html解析、执行,它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。小编以java语言源代码为例,分析cweid80:improperneutralizationofscript-relatedhtmltagsinawebpage(basicxss)
上述示例代码操作是获取用户的年龄,在第40行创建连接对象,在第44行创建输入流获得
使用360代码卫士对上述示例代码进行检测,可以检出“反射型XSS”缺陷,显示等级为高。从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第100行报出缺陷,如图1所示:
在上述修复代码中,由于页面输出的内容为用户的年龄,在第96行,对响应的内容转换为数字,这样就过滤了其它html的字符,即使存在字符,代码会报出异常,并不会造成反射型XSS的发生。
使用360代码卫士对修复后的代码进行检测,可以看到已不存在“反射型XSS”缺陷。如图2:
图2:修复后检测结果
要避免反射型XSS,需要注意以下几点:
(1)对用户的输入进行合理验证(如年龄只能是数字),对特殊字符(如、'、"等)以及
(2)根据数据将要置于HTML上下文中的不同位置(HTML标签、HTML属性、JavaScript脚本、CSS、URL),对所有不可信数据进行恰当的输出编码。
(3)设置