什么是XSS攻击
它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入个中Web里面的html代码会被实行,从而达到恶意攻击用户的分外目的。
XSS是黑客,恶意用户常用的注入漏洞,也是网站安全要考虑的问题
以Think PHP3.2框架为例
框架为了防止XSS(跨站脚本, cross site script)危害. 用户通过script脚本, 掌握web页面的行为. 采取的策略: 在吸收到浏览器端数据后, 将数据转换为HTML实体编码
这是框架的默认策略, 很low, 现在险些不用该策略
在吸收数据时, 就完成实体编码转换. 紧张的问题, “数据库中存储的不在是原始数据了. 而是处理过之后的数据”.
html实体编码后的数据
目前的策略是:
在数据输出到页面时, 才进行html实体编码转换.
都是利用HTML实体编码转换, 但是, 机遇不同. 合理的策略是输出时. 而不是输入时.
缘故原由: script脚本, 只有在浏览器端运行, 才有实行意义. 存储在数据库中,没有任何危害!
数据库中不知道用户到底真正输入的是什么!
方案:
关闭, 输入时, 自动实体编码处理
将默认的过滤器关掉
将过滤方法默认为空
输出时, 对可能发生的注入字段, 进行过滤:
模板中完成:
在须要的字段文章添加过滤
效果:
数据中, 存储的是原始数据, 未转换编码的数据
保存的是原始数据
输出时, 数据为实体编码:
详细讲解太长,再大略说一下对付Html编辑器的XSS的处理 该当是另一个办法
缘故原由:
其他字段, title字段, 输出时, 直接转换为实体标记即可.
但是, 对付描述这种html编辑器的内容. 输出时不能直接转换. 由于 html代码, 对付数据是故意义的.
处理方案: 将内容中的script部分, 转换成实体. 非script部分, 不去处理.
实现:
自定义一个过滤器函数
利用正则更换实现,只对script标签进行处理
定义成一个方法,再须要选择的时候选用该函数
结果
数据库中的数据:
输出时:
本文紧张是先容XSS防止机遇,更多干系资料可以联系