这里主要是介绍下防止XSS的时机判断,让你明白XSS实质应该防止的位置
什么是XSS攻击
它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
XSS是黑客,恶意用户常用的注入漏洞,也是网站安全要考虑的问题
以Think PHP3.2框架为例
框架为了防止XSS(跨站脚本, cross site script)危害. 用户通过script脚本, 控制web页面的行为. 采用的策略: 在接收到浏览器端数据后, 将数据转换为HTML实体 编码
这是框架的默认策略, 很low, 现在几乎不用该策略
在接收数据时, 就完成实体编码转换. 主要的问题, “数据库中存储的不在是原始数据了. 而是处理过之后的数据”.
目前的策略是:
在数据输出到页面时, 才进行html实体编码转换.
都是使用HTML实体编码转换, 但是, 时机不同. 合理的策略是输出时. 而不是输入时.
原因: script脚本, 只有在浏览器端运行, 才有执行意义. 存储在数据库中,没有任何危害!
数据库中不知道用户到底真正输入的是什么!
方案:
关闭, 输入时, 自动实体编码处理
将默认的 过滤器 关掉
输出时, 对可能发生的注入字段, 进行过滤:
模板中完成:
效果:
数据中, 存储的是原始数据, 未转换编码的数据
输出时, 数据为实体编码:
详细讲解太长,再简单说一下对于Html编辑器的XSS的处理 应该是另一个方式
原因:
其他字段, title字段, 输出时, 直接转换为实体标记即可.
但是, 对于描述这种html编辑器的内容. 输出时不能直接转换. 因为 html代码, 对于数据是有意义的.
处理方案: 将内容中的script部分, 转换成实体. 非script部分, 不去处理.
实现:
自定义一个过滤器函数
使用正则替换实现,只对script标签进行处理
结果
数据库中的数据:
输出时:
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~