当前位置:首页 > PHP教程 > php应用 > 列表

PHP魔术引号所带来的安全问题分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-20 16:25:00 浏览: 评论:0 

这篇文章主要介绍了PHP魔术引号所带来的安全问题分析,对于安全编码来说非常重要!需要的朋友可以参考下

PHP通过提取魔术引号产生的“\”字符会带来一定的安全问题,例如下面这段代码片段:

  1. // foo.php?xigr='ryat 
  2. function daddslashes($string$force = 0) { 
  3. !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); 
  4. if(!MAGIC_QUOTES_GPC || $force) { 
  5. if(is_array($string)) { 
  6. foreach($string as $key => $val) { 
  7. $string[$key] = daddslashes($val$force); 
  8. else { 
  9. $string = addslashes($string); 
  10. return $string
  11. ... 
  12. foreach(array('_COOKIE''_POST''_GET'as $_request) { 
  13. foreach($$_request as $_key => $_value) { 
  14. $_key{0} != '_' && $$_key = daddslashes($_value); 
  15. echo $xigr['hi']; 
  16. // echo \ 

上面的代码原本期望得到一个经过daddslashes()安全处理后的数组变量$xigr['hi'],但是没有对变量$xigr做严格的类型规定,当我们提交一个字符串变量$xigr='ryat,经过上面的处理变为\'ryat,到最后$xigr['hi']就会输出\,如果这个变量引入到SQL语句,那么就会引起严重的安全问题了,对此再来看下面的代码片段:

  1. ... 
  2. if($xigr) { 
  3. foreach($xigr as $k => $v) { 
  4. $uids[] = $v['uid']; 
  5. $query = $db->query("SELECT uid FROM users WHERE uid IN ('".implode("','"$uids)."')"); 

利用上面提到的思路,通过提交foo.php?xigr[]='&xigr[][uid]=evilcode这样的构造形式可以很容易的突破GPC或类似的安全处理,形成SQL注射漏洞!对此应给与足够的重视!

Tags: PHP魔术引号

分享到: