六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 146|回复: 0

php中安全补充

[复制链接]

升级  73.25%

801

主题

801

主题

801

主题

探花

Rank: 6Rank: 6

积分
2465
 楼主| 发表于 2013-2-7 20:14:19 | 显示全部楼层 |阅读模式
1 设置脚本可以访问的目录,一定限度上限制了PHP木马,比如
    open_basedir=d:/usr/www
   一般设置将php能打开的文件设置在指定的目录树中.
2 设置禁用的函数
    disable_functions,在php.ini的safe_mode=off下,可以用这个。
在php.ini中,比如
disable_functions = phpinfo,get_cfg_var
又或者
disable_functions= passthru,exec,shell_exec,system,fopen,mkdir,rmdir,chmod,unlink,dir ,fopen,fread,fclose,fwrite,file_exists ,closedir,is_dir,readdir.opendir ,fileperms.copy,unlink,delfile
但有的文件函数就用不了拉.
 
3 打开magic_quotes_gpc
  默认是关闭的,打开的话,会自动转义.
如果关闭的话,就用addslashes()咯
 
4 网上很多防止注入的程序,比如
 
<?php
/*
PHP整站防注程序,需要在公共文件中reqire_once本文件
by 风尘浪子 QQ:156544632 http://156544632.cn
*/
// 判断 magic_quotes_gpc 状态
if (@get_magic_quotes_gpc()) {
    $_GET = sec($_GET);
    $_POST = sec($_POST);
    $_COOKIE = sec($_COOKIE);
    $_FILES = sec($_FILES);
}
$_SERVER = sec($_SERVER);
function sec(&$array) {
//如果是数组
 if (is_array($array)) {
//遍历数组
  foreach ($array as $k => $v) {
//递归调用
   $array[$k] = sec($v);
  }
 } else if (is_string($array)) {
//stripslashes函数来处理
  $array = addslashes($array);
 }else if (is_numeric($array)) {
//intval函数来处理
  $array = intval($array);
 }
 return $array;
}
function num_check($id) {
  if (!$id) {die('参数不能为空!'); }    // 是否为空判断
  elseif (inject_check($id)) { die('非法参数!'); }    // 注射判断
  elseif (!is_numeric($id)) { die('非法参数!'); }    // 数字判断
  $id = intval($id);    // 整型化
  return  $id;
}
function str_check( $str) {
  $str= htmlspecialchars($str);  //转换Html
  return $str;
}
function search_check( $str) {
  $str = str_replace("_", "\_", $str);    // 把 '_'过滤掉
  $str = str_replace("%", "\%", $str);    // 把 '%'过滤掉
  $str= htmlspecialchars($str);  //转换Html
  return $str;
}
function post_check( $str,$min,$max) {
if(isset($min)&&strlen($str) < $min){
 die("最少$min字节");
}elseif(isset($max)&&strlen($str) >$max){
 die("最多$max字节");
}
  return stripslashes_array($str);
}
function inject_check($sql_str) {
  return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str);    // 进行过滤
}

?>
 
 
4 防止远程文件包含
  关闭allow_url_fopen
5 防止把表单保存下来再提交
  if($_SERVER['REQUEST_METHOD'] == 'POST' && (empty($_SERVER['HTTP_REFERER']) || preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) !== preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST']))) {
 die('来路不正确');
}
 
6 对比如用户发表评论后的东西回显到屏幕时,注意把html过滤掉
   // 清除HTML代码
function html_clean($content) {
 $content = htmlspecialchars($content);
 $content = str_replace("\n", "<br />", $content);
 $content = str_replace("  ", "  ", $content);
 $content = str_replace("\t", "    ", $content);
 $content = preg_replace("/\[quote=(.*?)\]\s*(.+?)\s*\[\/quote\]/is", "<div style=\"font-weight: bold\">引用 \\1 的评论:</div><div class=\"quote\">\\2</div>", $content);
 return $content;
}   
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表