网站地图    收藏   

主页 > 后端 > php资料库 >

PHP安全备忘录_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 一、PHP变量漏洞防范 1、所有变量进行初始化 2、在使用extract()分解由用户提交的数据组成的数组时,一定要设定第二个参数为:EXTR_SKIP 例如:extract($_REQUEST,EXTR_SKIP); 3、使用define函数定...

一、PHP变量漏洞防范

1、所有变量进行初始化
2、在使用extract()分解由用户提交的数据组成的数组时,一定要设定第二个参数为:EXTR_SKIP
例如:extract($_REQUEST,EXTR_SKIP);
3、使用define函数定义常量
4、严格控制变量的数据类型

二、文件包含漏洞防范

使用的文件名可以使用define函数定义的常量,或用户不能直接修改的变量。

三、SQL注入攻击防范

对用户提交的数据进行转义和过滤:

<?php
// @filename phpsafe.php
// @version 1.0

// @comment PHP Safe Functions
// =============================
function adm_escape_filter($str, $allowHtml = true) {
static $func = '';
if (empty($func)) {
if (function_exists('mysql_real_escape_string') && $GLOBALS['db']) {
// 使用本函数之前,请确认已经进行过数据库连接。
$func = 'mysql_real_escape_string'; //转义字符有:\x00, \n, \r, \, ', " and \x1a
} else {
$func = 'addslashes'; //转义字符有:',",\, NULL
}
}

if (is_array($str)) {
foreach($str AS $k => $v) {
if($k!='GLOBALS'&&!ereg('^_[A-Z]+$',$k)) {
$str[$k] = adm_escape_filter($v, $allowHtml);
}else{
unset($str[$k]);
}
}
} else {
$str = $func($str);
$str = adm_filter($str,$allowHtml);
}
return $str;
}

function adm_filter($str, $allowHtml = true, $break = 0) {
if (is_array($str)) {
foreach($str AS $k => $v) {
if($k!='GLOBALS'&&!ereg('^_[A-Z]+$',$k)) {
$str[$k] = adm_filter($v, $allowHtml, $break);
}else{
unset($str[$k]);
}
}
} else {
if(!$allowHtml) {
$str = htmlspecialchars($str);
}
if ($break) {
if (preg_match('{(select|insert|update|delete|/\*|union|into|load_file|outfile|0xbf)}is', $str, $fd)) {
exit('<script type="text/javascript">
<!--
alert("\u60A8\u63D0\u4EA4\u7684\u6570\u636E\u4E2D\u5305\u542B\u975E\u6CD5\u5B57\u7B26\u300E' . $fd[1] .'\n('.$str.')'. '\u300F\uFF0C\u8BF7\u4FEE\u6539\u3002");
//-->
</script>');
}
} else {
$str = preg_replace_callback('{(select|insert|update|delete|/\*|union|into|load_file|outfile|0xbf)}is', 'adm_preg_callback', $str);
}
}
return $str;
}

function adm_preg_callback($p) {
if ($p[1]) {
$len=strlen($p[1]);
if($len>1) {
$p[1] = substr($p[1], 0, $len-1) . ' ' . substr($p[1], -1);
}else{
$p[1] = '';
}
}
return $p[1];
}

function adm_t($p,$t='i') {
switch($t){
case 'i'://整数
$p = preg_replace('{[^0-9]+}is','',$p);
$p = intval($p);
break;
case 'a'://字母
$p = preg_replace('{[^a-z]+}is','',$p);
break;
case 's'://字符串
$p = strval($p);
break;

case 'aiu'://字母数字下划线
default:
$p = preg_replace('{[^a-z0-9_]+}is','',$p);
}
return $p;
}

if (!defined('ADM_GPC_QUOTES')) {
define('ADM_GPC_QUOTES', get_magic_quotes_gpc());
}
if ($_REQUEST) {
if ($_COOKIE) {
$_COOKIE = ADM_GPC_QUOTES ? adm_filter($_COOKIE, false) : adm_escape_filter($_COOKIE, false);
}
if ($_POST) {
$_POST = ADM_GPC_QUOTES ? adm_filter($_POST) : adm_escape_filter($_POST);
}
if ($_GET) {
$_GET = ADM_GPC_QUOTES ? adm_filter($_GET, false) : adm_escape_filter($_GET, false);
}
$_REQUEST = @array_merge($_COOKIE,$_POST,$_GET);
extract($_REQUEST,EXTR_SKIP);
}
if($_FILES) {
$_FILES = ADM_GPC_QUOTES ? adm_filter($_FILES, false) : adm_escape_filter($_FILES, false);
}
$_SERVER = adm_escape_filter($_SERVER, false);
将以上代码保存为phpsafe.php,并在所有脚本中包含本文件。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论