CakePHP数据清理
数据清理
Section 1 在应用中使用Sanitize
Cake为我们提供了Sanitize,这个类可以用来去除用户提交的数据中带有的恶意攻击性数据和其它一些不必要的数据。Sanitize是一个核心类库,所以它可以被我们用在代码中的任何一部分,但是最好用在controllers或者models中
//首先,包含这个核心库
uses('sanitize');
//接下来,创建一个新的Sanitize对象
$mrClean = new Sanitize();
//在这里,你可以使用Sanitize来清除你的数据
//这些方法将在下个章节进行说明
//首先,包含这个核心库
uses('sanitize');
//接下来,创建一个新的Sanitize对象
$mrClean = new Sanitize();
//在这里,你可以使用Sanitize来清除你的数据
//这些方法将在下个章节进行说明
Section 2 保证在SQL和HTML中数据的安全性
这一小节将说明怎么样使用Sanitize提供的一些函数
paranoid
string $string
array $allowedChars
当$string这个字符串不是纯粹由文字数字式字符组成时,函数能去除对象中任何不需要的字符。当然你仍然可以忽略那些在$allowed数组中的字符,以便让它们通过。
$badString = ";:<script><html>< // >@@#";
echo $mrClean->paranoid($badString);
// output: scripthtml
echo $mrClean->paranoid($badString, array(' ', '@'));
// output: scripthtml @@
$badString = ";:<script><html>< // >@@#";
echo $mrClean->paranoid($badString);
// output: scripthtml
echo $mrClean->paranoid($badString, array(' ', '@'));
// output: scripthtml @@
html
string $string
boolean $remove = false
这个方法能帮助你获得准备在一个存在的html布局中显示的数据。如果你不想用户能破坏你的布局或插入图片或blog日志中的编写脚本、在论坛中发帖等等这些行为,那么这个函数对你特别有用。如果$remove选项被设置为true,那么任何html元素将被去除,这将比作为一个html实体提交要好得多。
$badString = '<font size="99" color="#FF0000">HEY</font><script>...</script>';
echo $mrClean->html($badString);
// output: <font size="99" color="#FF0000">HEY</font><script>...</script>
echo $mrClean->html($badString, true);
// output: font size=99 color=#FF0000 HEY fontscript...script
$badString = '<font size="99" color="#FF0000">HEY</font><script>...</script>';
echo $mrClean->html($badString);
// output: <font size="99" color="#FF0000">HEY</font><script>...</script>
echo $mrClean->html($badString, true);
// output: font size=99 color=#FF0000 HEY fontscript...script
sql
string $string
使用该方法可以省去你在sql语句中添加'\'来输入特殊字符,这取决于系统当前对magic_quotes_gpc的设定
cleanArray
array @$dirtyArray
这个函数是一个有着高强度和多功能的清洁器,意思是说它能被用在整个数组上(比如说$this->params['form'])。这个函数取得一个数组并清理它:没有返回值是因为$dirtyArray是传递的对象引用。接下来的清理操作将在这个数组的每一个元素上进行(以递归的形式):
不对称的空格(包括0xCA)会被替换为符合规格的空格
HTML将被替换为与其对应的HTML实体(包括'\n'替换为<br>)
为了增加sql的安全性对特殊字符进行双重检查并且去除了回车
为sql增加'\'(仅在上述的 sql 函数调用的时候进行)
替换用户输入的反斜线符号为正确的反斜线符号