php专区

 首页 > php专区 > PHP应用 > 常用功能 > PHP 防注入安全实现程序代码 - php高级应用

PHP 防注入安全实现程序代码 - php高级应用

分享到:
【字体:
导读:
          以前讲述的很多关于sql防注入的代码,但是还是得从我们的服务器脚本开始了,下面就来讲述一个下php中防注入的一些常见方法大家可参考.最常用见的可能就是:首先将magic_quotes_gpc设置为...

PHP 防注入安全实现程序代码

以前讲述的很多关于sql防注入的代码,但是还是得从我们的服务器脚本开始了,下面就来讲述一个下php中防注入的一些常见方法大家可参考.

最常用见的可能就是:

首先将magic_quotes_gpc设置为On,display_errors设置为Off,如果id型,我们利用intval()将其转换成整数类型,如代码:$id=intval($id);

好了下面我来介绍php提交数据过滤的基本原则 

1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了,其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择.

2)在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠,magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用,其实,早在以前注入很疯狂时,这个参数就很流行了.

3)在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样你也就可以放心的使用系统函数.

4)对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换,比如尖括号"<"就将转化为 "<"这样无害的字符。

代码如下:

$new = htmlspecialchars("Test",ENT_QUOTES);
strip_tags($text,); 

5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想这样也就无懈可击了.

2、PHP简单的数据过滤

1)入库:trim($str),addslashes($str)

2)出库:stripslashes($str)

3)显示:htmlspecialchars(nl2br($str))

分享一个实例,具体的代码如下:

  1.    //security.php 
  2. /** 
  3.  * @author zhengwei 
  4.  * @copyright 2007 
  5.  */ 
  6. /*  
  7. 函数名称:inject_check()  
  8. 函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全  
  9. 参  数:$sql_str: 提交的变量  
  10. 返 回 值:返回检测结果,ture or false  
  11. 函数作者:heiyeluren  
  12. */  
  13. function inject_check($sql_str) {   
  14.   return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str);    // 进行过滤   
  15. } //开源代码phpfensi.com 
  16.  
  17. /*  
  18. 函数名称:verify_id()  
  19. 函数作用:校验提交的ID类值是否合法  
  20. 参  数:$id: 提交的ID值  
  21. 返 回 值:返回处理后的ID  
  22. 函数作者:heiyeluren  
  23. */  
  24. function verify_id($id=null) {   
  25.   if (!$id) { exit('没有提交参数!'); }    // 是否为空判断   
  26.   elseif (inject_check($id)) { exit('提交的参数非法!'); }    // 注射判断   
  27.   elseif (!is_numeric($id)) { exit('提交的参数非法!'); }    // 数字判断   
  28.   $id = intval($id);    // 整型化   
  29.  
  30.   return  $id;   
  31. }   
  32.  
  33. /*  
  34. 函数名称:str_check()  
  35. 函数作用:对提交的字符串进行过滤  
  36. 参  数:$var: 要处理的字符串  
  37. 返 回 值:返回过滤后的字符串  
  38. 函数作者:heiyeluren  
  39. */  
  40. function str_check( $str ) {   
  41.   if (!get_magic_quotes_gpc()) {    // 判断magic_quotes_gpc是否打开   
  42.     $str = addslashes($str);    // 进行过滤   
  43.   }   
  44.   $str = str_replace("_""_"$str);    // 把 '_'过滤掉   
  45.   $str = str_replace("%""%"$str);    // 把 '%'过滤掉   
  46.  
  47.   return $str;    
  48. }   
  49.  
  50. /*  
  51. 函数名称:post_check()  
  52. 函数作用:对提交的编辑内容进行处理  
  53. 参  数:$post: 要提交的内容  
  54. 返 回 值:$post: 返回过滤后的内容  
  55. 函数作者:heiyeluren  
  56. */  
  57. function post_check($post) {   
  58.   if (!get_magic_quotes_gpc()) {    // 判断magic_quotes_gpc是否为打开   
  59.     $post = addslashes($post);    // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤   
  60.   }   
  61.   $post = str_replace("_""_"$post);    // 把 '_'过滤掉   
  62.   $post = str_replace("%""%"$post);    // 把 '%'过滤掉   
  63.   $post = nl2br($post);    // 回车转换   
  64.   $post = htmlspecialchars($post);    // html标记转换   
  65.  
  66.   return $post;   
  67. }  
  68.  
  69.  
  70. foreach ($_POST as $post_key=>$post_var
  71.  if (is_numeric($post_var)) { 
  72.   $post[strtolower($post_key)] = get_int($post_var); 
  73.  } else { 
  74.   $post[strtolower($post_key)] = get_str($post_var); 
  75.  } 
  76.  
  77. /* 过滤函数 */ 
  78. //整型过滤函数 
  79. function get_int($number
  80.     return intval($number); 
  81. //字符串型过滤函数 
  82. function get_str($string
  83.     if (!get_magic_quotes_gpc()) { 
  84.  return addslashes($string); 
  85.     } 
  86.     return $string
  87.  
  88. ?> 

在有些cms中我会看到如下代码:

  1. foreach($HTTP_POST_VARS as $key=>$value){  
  2. $ArrPostAndGet[]=$value;  
  3. }  
  4. foreach($HTTP_GET_VARS as $key=>$value){  
  5. $ArrPostAndGet[]=$value;  

这个的代码然后在所有页面都加载这个函数,这样过滤个人发现好像上传文件时会有问题.

分享到:
php代码恶意ddos攻击解决办法 - php高级...
php代码恶意ddos攻击解决办法 php代码恶意ddos攻击以前我是碰过一次,把服务器资源全部占了,这样导致网站无法正常使用了,下面我来介绍解决办法. 解决办法,修改php.ini文件,代码如下: "disable_functions" //改成gzinflate,默认是放空  "allow_url_fopen" //设为Off   php_socke...
php中safe_mode安全模式配置详解 - php高...
php中safe_mode安全模式配置详解 在php中有一个普通模式与安全模式了,现在大多数据用户都是直接使用应用程序的php普通模式了,因为安全模式配置之后有很多功能受到了限制,下面我来给大家具体讲述安全模式配置方法. 当安全模式打开的时候,以下函数列表的功能将会受到限制: chdir , move_uploa...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……