知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

PHP安全笔记

发布时间:2012-01-29 23:17:02作者:知识屋

1、           Magic Quotes选项
  
  
PHP.INI中中有三个以magic_quotes_开头的选项
  
magic_quotes_gpc如果是On的话,就会自动用‘’转义从GET,POST,COOKIE来的数据,这是为什么我们想在URL中输入’; show tables;–有时候失败的原因,因为被转义了呗
  
magic_quotes_runtime如果是on,会自动转义来自数据库或字符串中数据magic_quotes_sybase会用单引号代替反斜杠来转义
  
我们可以使用addslashes函数来达到同样目的,不过有时候得用stripslashes来取消转义哦
  
2、           PHP的命令执行函数
  
a)      system:执行一个外部的应用程序并显示输出的结果
  
b)      exec:执行一个外部的应用程序
  
c)       passthru:执行一个UNIX系统命令并返回原始的输出
  
d)      shell_exec:执行shell命令并返回输出的字符串
  
e)      ““”运算符:与shell_exec功能相同
  
system举例-列出C盘内容:
  
<?php
  
echo"<pre>";
  
$last_line= system("dir c:", $retval);
  
echo"</pre>";
  
  echo"命令输出的最后一行:". $last_line. "<br />";
  
echo"命令的返回值:". $retval;
  
?>
exec执行外部应用程序-列出C盘内容:
<?php
  
$output= array();
  
echo"<pre>";
  
$last_line= exec("dir c:", $output);
  
echo"</pre>";
  
while(list($key, $value) = each($output))
  
{
  
     echo$value. "<br />";
  
}
  
echo"命令输出的最后一行:". $last_line. "<br />";
echo"命令的返回值:". $retval;
  
?>
string shell_exec( string cmd )
<?php
  
echo"<pre>";
  
$output= shell_exec("dir c:");
  
echo"</pre>";
  
echonl2br($output) . "<br />";
<?php
  
echo"<pre>";
  
$output= `dir c:`;
  
echo"</pre>";
  
echonl2br($output) . "<br />";
  
?>
3、  EVAL函数攻击
  
下面的例子我换参数为system(“dir c:”);,执行失败了,是因为我的php.ini中;
  
Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = On
这句话导致system括号里的双引号被转义,导致执行失败
<?php
  
$myvar= "varname";
  
if(isset($_GET["arg"]))
  
{
  
     $arg= $_GET["arg"];
  
     //arg参数可以替换成system造成命令注入攻击
  
     eval("$myvar = $arg;");//eval 能够执行里面的字符串的PHP代码
  
     echo"$myvar = ". $myvar;
  
}
  
?>
4、           防范命令注入攻击和EVAL注入攻击的方法
  
使用函数escateshellarg 函数过滤传来的字符串参数即可
  
5、           客户端脚本攻击-SQL Insertion
  
客户端脚本攻击,就是用户在留言板框内输入js脚本,然后别人就中招了
解决方法就是HTML输出过滤
在PHP中有两种方法可以进行HTML输出过滤:
  
l  使用strip_tags来删除字符串中的PHP和HTML标签
  
l  使用htmlspecialchars函数来讲特殊字符转换成HTML编码,而不是执行,这是解决该问题的最佳方法
  
l  跨网站脚本攻击XSS解决方法
  
很简单,仍然使用htmlspecialchars将来自URL的参数过滤一下即可,这样不让来自URL的js代码执行就OK
  
如果在表单中用的是action=$_SERVER['PHP_SELF']或者action=$SCRIPT_NAME的时候,会被XSS注入,解决方法:
  
在action后面的URL加上htmlspecialchars过滤
action写成空,即action=”默认是提交到自身页面的,所以没必要,该情况用于表单是自身处理的情况
  
6、           SQL注入攻击的防御方法:
  
a)      如果确定是整数,用intval过滤参数
  
b)      如果确定是浮点数,用floatval或doubleval函数过滤
  
c)       如果是字符串,则用addslashes函数将单引号,双引号,反斜杠,NULL等字符转义
  
请注意,PHP.INI中的magic_quotes_gpc如果为ON,那么字符串中引号等会被自动加上反斜杠转义,那么如果我们再加上addslashes函数就会有了两个反斜杠,使得SQL语句中出现了一个反斜杠后被执行,会出错误的。
  
解决方法,使用get_magic_quotes_gpc判断是不是将该值设置为ON了,如果是ON返回1,如果offf返回0
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜