PHP防注入安全代码

      PHP CMS 2009-7-5 20:27

http://www.jb51.net/article/14120.htm

简述:/*************************
说明:
判断传递的变量中是否含有非法字符
如$ _POST、$ _GET
功能:防注入
**************************/


<?php
//要过滤的非法字符
$ ArrFiltrate=array("'",";","union");
//出错后要跳转的url,不填则默认前一页
$ StrGoUrl="";
//是否存在数组中的值
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);
}
}
/* 过滤函数 */
//整型过滤函数
function get_int($ number)
{
return intval($ number);
}
//字符串型过滤函数
function get_str($ string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($ string);
}
return $ string;
}
回复Comments() 点击Count()

回复Comments

{commentauthor}
{commentauthor}
{commenttime}
{commentnum}
{commentcontent}
作者:
{commentrecontent}