请求层面的过滤 在 request 层面 我们可能要做的是如何防止非法html 的标签的提交, 例如<script><iframe><html>等。在这里 我们可以用一个php 函数 htmlspecialchars (http://www./manual/en/function.htmlspecialchars.php) 这样的话前台提交的所有内容 如果包含html 标签的话 就会被转义,并且在输出的时候 这些标签会直接显示在浏览器里边 而不会被当做script被浏览器所执行。 SQL层面的控制 –什么是SQL注入 如果用户传入的参数 需要用于构造sql 语句的话 那么我们就需要对输入的参数进行再一次过滤, 来达到防止sql注入的目的。首先让我们来看看什么叫做sql注入,下边有这么一个例子: 在php 中我们往往会这样去构造一个sql语句 1.HTTP://xxx.xxx.xxx/abc.php?name=rocky 2.HTTP://xxx.xxx.xxx/abc.php?name=rocky’%20or%201=’1 (%20 表示空格) 3.HTTP://xxx.xxx.xxx/abc.php?name=rocky’;delete from user where 1=’1 (%20 表示空格) –如何防范SQL注入 那么我们要如何来防止这样的情况呢, 下边我以zend framework防注入的原理来谈一种解决方案: 1. 首先我们需要对用于实现sql注入的关键字进行一次过滤, 这里的关键字有’ ” 和 ; 在这些符号前加上/, zend 的实现是这样的 addcslashes($value, “\000\n\r\\’\”\032″); 2. 其次, 在用户传入的参数到达sql之前, 我们需要明白我们期待的用户传入是个什么类型的值, 字符串or整数or浮点 具体实现: function quote( $value , $type ){ if( $type == "integer" ){ return intval( $value ); }elseif( $type == "float" ){ return sprintf('%F', $value ); }else{ return "'" . addcslashes($value, "\000\n\r\\'\"\032") ."'" } } $sql = "select * from user where name = ?"; str_replace( "?" , quote( $value , "String" ) , $sql ); |
|
来自: wwwijhyt图书馆 > 《程序设计》