努力思考 + 实践, 眼高手低是不行的. 注册 | 登陆

PHP防恶意用户输入

1. 过滤影响SQL正常运行的字符。

1) 过滤影响MySQL正常运行的字符。

当需要把用户输入的内容(有可能包含单引号、双引号 、反斜线、空字元 NUL )代入到mysql的语句 中执行时,应该把APACHE中的magic_quotes_gpc项设成On。

如果APACHE中的此项设成Off时,也可用php的函数addslashes()达到相同的目的,但这两种手段不能同时使用,否则会出现重复替换,出现错误。

样例:

PHP代码
  1. <?php      
  2. if (get_magic_quotes_gpc()) {   
  3.     $content=$_POST["content"];   
  4. else {   
  5.     $content=addslashes($_POST["content"]);   
  6. }   
  7. ?>  

当然,如果APACHE中的magic_quotes_gpc项为On,但有时又不想转义某项的特殊字符,可以使用stripslashes()去掉其中的 \

2) 过滤影响MSSQL正常运行的字符。

当需要把用户输入的内容(有可能包含单引号)代入到mssql的语句中执行时,应该把APACHE中的magic_quotes_sybase项设成On,此时magic_quotes_gpc项不再生效。

如果APACHE中的此项设成Off时,php中并没有合适的函数达到相同的目的,只能使用字符串替换函数来达到此目的。

样例:

PHP代码
  1. <?php   
  2. $content=str_replace("'","''"$_POST["content"]);   
  3. ?>   

现在10.218.17.53上的PHP既要访问mysql又要访问mssql,APACHE中的设置不能兼顾两种数据库,所以只对mysql做了相应设置。


2. 应对用户输入包含SQL语句的一个措施。

以下两种SQL写法都比较普遍,但安全程度是不同的,当用户提交的$id='1 and 1=2 union select ...'时第一种就会显示出不该显示的数据,而第二种就相对安全些。

SQL代码
  1. Select * FROM article Where articleid=$id   
  2. Select * FROM article Where articleid='$id'  

 

3. 防止用户输入的内容因包含html标签或javascript而影响页面的正常显示。

可以用htmlspecialchars()过滤其中的 & " < >

PHP代码
  1. $content=htmlspecialchars($content);  

4. 当页面要显示的内容包含回车换行时,可以使用nl2br()来达到页面上换行的效果。

Tags: php技巧, php, 安全

« 上一篇 | 下一篇 »

只显示5条记录相关文章

Notepad++运行PHP, Python (浏览: 4015, 评论: 0)
守护进程删除smarty的缓存文件(注释版) (浏览: 3429, 评论: 0)
Php ini_set ini_get可操作配置参数列表 (浏览: 9137, 评论: 1)
资料备忘,保持更新。 (浏览: 6039, 评论: 0)
40个迹象表明你还是PHP菜鸟 (浏览: 4219, 评论: 2)

Trackbacks

点击获得Trackback地址,Encode: UTF-8

本文因为某种原因此时不允许访客进行评论