PHP防注入安全代碼
更新時(shí)間:2008年04月09日 23:05:01 作者:
判斷傳遞的變量中是否含有非法字符我們把以下代碼放到一個(gè)公共的文件里,比如security.inc.php里面,每個(gè)文件里都include一下這個(gè)文件,那么就能夠給任何一個(gè)程序進(jìn)行提交的所有變量進(jìn)行過濾了,就達(dá)到了我們一勞永逸的效果。
簡述:/*************************
說明:
判斷傳遞的變量中是否含有非法字符
如$_POST、$_GET
功能:防注入
**************************/
<?php
//要過濾的非法字符
$ArrFiltrate=array("'",";","union");
//出錯(cuò)后要跳轉(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;
}
}
//驗(yàn)證開始
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
然后在每個(gè)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");
//出錯(cuò)后要跳轉(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;
}
}
//驗(yàn)證開始
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
然后在每個(gè)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運(yùn)行環(huán)境配置(從安裝、優(yōu)化、安全等)
- PHP中字符安全過濾函數(shù)使用小結(jié)
- php 安全過濾函數(shù)代碼
- Windows下的PHP安裝文件線程安全和非線程安全的區(qū)別
- PHP永久登錄、記住我功能實(shí)現(xiàn)方法和安全做法
- PHP實(shí)現(xiàn)單例模式最安全的做法
- PHP開發(fā)中常見的安全問題詳解和解決方法(如Sql注入、CSRF、Xss、CC等)
- 簡單的方法讓你的后臺(tái)登錄更加安全(php中加session驗(yàn)證)
- Linux下PHP+Apache的26個(gè)必知的安全設(shè)置
相關(guān)文章
php獲取url字符串截取路徑的文件名和擴(kuò)展名的函數(shù)
php url字符串截取路徑的文件名和擴(kuò)展名,需要的朋友可以參考下。2010-01-01php字符串分割函數(shù)explode的實(shí)例代碼
在php中分割一個(gè)字符串,我們可以使用函數(shù)explode(),其原型如下2013-02-02PHP接口多繼承及tarits實(shí)現(xiàn)多繼承效果的方法
這篇文章主要介紹了PHP接口多繼承及tarits實(shí)現(xiàn)多繼承效果的方法,結(jié)合實(shí)例形式分析了php基于接口的多繼承及PHP5.4中引入的tarits實(shí)現(xiàn)多繼承功能簡單操作技巧,需要的朋友可以參考下2018-01-01PHP連接Access數(shù)據(jù)庫的方法小結(jié)
有時(shí)候我們?cè)陂_發(fā)一些小程序或簡單功能的管理系統(tǒng),又沒有mysql數(shù)據(jù)庫的情況下,就可以使用access了,這里介紹下鏈接方法2013-06-06