https://www.cnblogs.com/applelife/p/10477583.html
跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。
XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式
5.1、html实体
什么是html实体?
在html中有些字符,像(<)这类的,对HTML(标准通用标记语言下的一个应用)来说是有特殊意义的,所以这些字符是不允许在文本中使用的。要在HTML中显示(<)这个字符,我们就必须使用实体字符。
html实体的存在是导致XSS漏洞的主要原因之一。
因此我们需要将这些实体全部转换为相应的实体编号。
显示结果 | 描述 | 实体名称 |
| 空格 | |
< | 小于号 | < |
> | 大于号 | > |
& | 和号 | & |
" | 引号 | " |
' | 撇号 | ' (IE不支持) |
5.2、HTML Encode
用户将数据提交上来的时候进行HTML编码,将相应的符号转换为实体名称再进行下一步的处理。
在PHP中已经存在这样子功能的函数,即是htmlentities($str)函数。
与之相反的就是html_entity_decode($str)函数,它将实体名称转换为相应的符号。
前端方法链接 https://www.cnblogs.com/lovesong/p/5211667.html
5.3、修复漏洞方针
【不相应用户提交的数据,过滤过滤过滤!】
1、将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
2、表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。
4、对数据进行Html Encode 处理
5、过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, " for
6、过滤JavaScript 事件的标签。例如 "οnclick=", "onfocus" 等等。
【特别注意:】
在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!