PHP防注入安全代碼
更新時間:2008年04月09日 23:05:01 作者:
判斷傳遞的變量中是否含有非法字符我們把以下代碼放到一個公共的文件里,比如security.inc.php里面,每個文件里都include一下這個文件,那么就能夠給任何一個程序進(jìn)行提交的所有變量進(jìn)行過濾了,就達(dá)到了我們一勞永逸的效果。
簡述:/*************************
說明:
判斷傳遞的變量中是否含有非法字符
如$_POST、$_GET
功能:防注入
**************************/
<?php
//要過濾的非法字符
$ArrFiltrate=array("'",";","union");
//出錯后要跳轉(zhuǎn)的url,不填則默認(rèn)前一頁
$StrGoUrl="";
//是否存在數(shù)組中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//合并$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//驗證開始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "<script language=\"javascript\">alert(\"非法字符\");</script>";
if (emptyempty($StrGoUrl)){
echo "<script language=\"javascript\">history.go(-1);</script>";
}else{
echo "<script language=\"javascript\">window.location=\"".$StrGoUrl."\";</script>";
}
exit;
}
}
?>
保存為checkpostandget.php
然后在每個php文件前加include(“checkpostandget.php“);即可
方法2
/* 過濾所有GET過來變量 */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
}
/* 過濾所有POST過來的變量 */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
}
/* 過濾函數(shù) */
//整型過濾函數(shù)
function get_int($number)
{
return intval($number);
}
//字符串型過濾函數(shù)
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}
說明:
判斷傳遞的變量中是否含有非法字符
如$_POST、$_GET
功能:防注入
**************************/
復(fù)制代碼 代碼如下:
<?php
//要過濾的非法字符
$ArrFiltrate=array("'",";","union");
//出錯后要跳轉(zhuǎn)的url,不填則默認(rèn)前一頁
$StrGoUrl="";
//是否存在數(shù)組中的值
function FunStringExist($StrFiltrate,$ArrFiltrate){
foreach ($ArrFiltrate as $key=>$value){
if (eregi($value,$StrFiltrate)){
return true;
}
}
return false;
}
//合并$_POST 和 $_GET
if(function_exists(array_merge)){
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);
}else{
foreach($HTTP_POST_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
foreach($HTTP_GET_VARS as $key=>$value){
$ArrPostAndGet[]=$value;
}
}
//驗證開始
foreach($ArrPostAndGet as $key=>$value){
if (FunStringExist($value,$ArrFiltrate)){
echo "<script language=\"javascript\">alert(\"非法字符\");</script>";
if (emptyempty($StrGoUrl)){
echo "<script language=\"javascript\">history.go(-1);</script>";
}else{
echo "<script language=\"javascript\">window.location=\"".$StrGoUrl."\";</script>";
}
exit;
}
}
?>
保存為checkpostandget.php
然后在每個php文件前加include(“checkpostandget.php“);即可
方法2
復(fù)制代碼 代碼如下:
/* 過濾所有GET過來變量 */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
}
/* 過濾所有POST過來的變量 */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
}
/* 過濾函數(shù) */
//整型過濾函數(shù)
function get_int($number)
{
return intval($number);
}
//字符串型過濾函數(shù)
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}
您可能感興趣的文章:
- php.ini 啟用disable_functions提高安全
- php中安全模式safe_mode配置教程
- PHP安全的URL字符串base64編碼和解碼
- 理解php Hash函數(shù),增強(qiáng)密碼安全
- PHP 線程安全與非線程安全版本的區(qū)別深入解析
- php的mkdir()函數(shù)創(chuàng)建文件夾比較安全的權(quán)限設(shè)置方法
- PHP開發(fā)不能違背的安全規(guī)則 過濾用戶輸入
- php中使用exec,system等函數(shù)調(diào)用系統(tǒng)命令的方法(不建議使用,可導(dǎo)致安全問題)
- PHP更安全的密碼加密機(jī)制Bcrypt詳解
- win2008 r2 服務(wù)器php+mysql+sqlserver2008運行環(huán)境配置(從安裝、優(yōu)化、安全等)
- PHP中字符安全過濾函數(shù)使用小結(jié)
- php 安全過濾函數(shù)代碼
- Windows下的PHP安裝文件線程安全和非線程安全的區(qū)別
- PHP永久登錄、記住我功能實現(xiàn)方法和安全做法
- PHP實現(xiàn)單例模式最安全的做法
- PHP開發(fā)中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
- 簡單的方法讓你的后臺登錄更加安全(php中加session驗證)
- Linux下PHP+Apache的26個必知的安全設(shè)置
相關(guān)文章
php獲取url字符串截取路徑的文件名和擴(kuò)展名的函數(shù)
php url字符串截取路徑的文件名和擴(kuò)展名,需要的朋友可以參考下。2010-01-01PHP接口多繼承及tarits實現(xiàn)多繼承效果的方法
這篇文章主要介紹了PHP接口多繼承及tarits實現(xiàn)多繼承效果的方法,結(jié)合實例形式分析了php基于接口的多繼承及PHP5.4中引入的tarits實現(xiàn)多繼承功能簡單操作技巧,需要的朋友可以參考下2018-01-01PHP連接Access數(shù)據(jù)庫的方法小結(jié)
有時候我們在開發(fā)一些小程序或簡單功能的管理系統(tǒng),又沒有mysql數(shù)據(jù)庫的情況下,就可以使用access了,這里介紹下鏈接方法2013-06-06