Open drodata opened 9 years ago
读完 Security - Cross-site Scripting Prevention 后,发现之前根本没在意这方面。随便找了一个页面(clip/create ),在 "Content" 栏输入下面的内容并提交:
clip/create
<script>alert('OMG');</script>
在 clip/view 页面,弹窗出现,一个最简单的 XSS 实例就这么诞生了。
clip/view
CHtmlPurifier API 中说由于 HTML Purifier Package 体积大,因此会影响到性能。API 中建议的正确使用方法是——在数据存入 DB 前进行 purify 工作,而不是将含有恶意代码的内容存入 DB, 每次读取前进行一次 purify 工作。
CHtmlPurifier
CHtmlPurifier 可以以 validation rule 的形式使用,下面是一个例子:
array('title, content','filter','filter'=>array($obj=new CHtmlPurifier(),'purify')),
套用到其它 Models 时,仅需修改第一个参数即可。
:bulb: filter 的值类型为 Callback, 如果对 array($obj=new CHtmlPurifier(),'purify') 表示疑惑,表明对 Callback 的基础知识欠缺。Callback 的本质是函数,而函数有多种形式:普通自定义函数、类中的方法等。对于前者,直接用 String 类型的函数名表示即可,后者需要用特殊的数组来表示:Index 0 表示实例化的类,Index 1 表示方法的名称。
filter
array($obj=new CHtmlPurifier(),'purify')
此外,filter validation rule 实际上不是 validator, 而是 data processor. 它的作用和函数 trim() 的作用很类似。以上面这个 rule 为例,假设 content 栏输入内容如下:
trim()
content
Hello<script>alert('OMG');</script>
经过 filter validator “验证”(实际上是处理)后,content 的值已经变成:
Hello
本次 commit 以 clip model 为例,演示了如何避免 XSS 攻击,以后凡是使用文本框(<input type="text">, <textarea>)搜集数据的 attributes, 都要加上 filter validation rule.
clip
<input type="text">
<textarea>
对
表示 Callback 没看懂,参考 Callback 基础内容后明白,这个 callback 实际上是 $obj->purify() method.
$obj->purify()
读完 Security - Cross-site Scripting Prevention 后,发现之前根本没在意这方面。随便找了一个页面(
clip/create
),在 "Content" 栏输入下面的内容并提交:在
clip/view
页面,弹窗出现,一个最简单的 XSS 实例就这么诞生了。Resolution
CHtmlPurifier
API 中说由于 HTML Purifier Package 体积大,因此会影响到性能。API 中建议的正确使用方法是——在数据存入 DB 前进行 purify 工作,而不是将含有恶意代码的内容存入 DB, 每次读取前进行一次 purify 工作。CHtmlPurifier
可以以 validation rule 的形式使用,下面是一个例子:套用到其它 Models 时,仅需修改第一个参数即可。
:bulb:
filter
的值类型为 Callback, 如果对array($obj=new CHtmlPurifier(),'purify')
表示疑惑,表明对 Callback 的基础知识欠缺。Callback 的本质是函数,而函数有多种形式:普通自定义函数、类中的方法等。对于前者,直接用 String 类型的函数名表示即可,后者需要用特殊的数组来表示:Index 0 表示实例化的类,Index 1 表示方法的名称。此外,
filter
validation rule 实际上不是 validator, 而是 data processor. 它的作用和函数trim()
的作用很类似。以上面这个 rule 为例,假设content
栏输入内容如下:经过
filter
validator “验证”(实际上是处理)后,content
的值已经变成:本次 commit 以
clip
model 为例,演示了如何避免 XSS 攻击,以后凡是使用文本框(<input type="text">
,<textarea>
)搜集数据的 attributes, 都要加上filter
validation rule.