- php防止sql注入攻击的简单代码
- 发布时间:2008-04-17 14:55:29 浏览数:5413 发布者:superadmin 设置字体【大 中 小】
网上有不少关于SQL注入防范的代码,如用户输入了SQL关键字,就会被拦或被踢出去.
我写了这段代码同样可以过滤SQL,但不会踢人.原理很简单,把SQL关键字用中括号括起来就可以了.当显示数据时写一个函数把中括号去除以便看起来美观.
用法了很简单:只要把它包含在你的页面里即可:<? include("GetPost.php"); ?>
以下给出了这段代码的内容:
<?php
function dowith_sql($str)
{
$refuse_str="and|or|select|update|from|where|order|by|*|delete|'|insert|into|values|create|table|database";
$arr=explode("|",$refuse_str);
for($i=0;$i<count($arr);$i++)
{
$replace="[".$arr[$i]."]";
$str=str_replace($arr[$i],$replace,$str);
}
return $str;
}
foreach ($_GET as $key=>$value)
{
$_GET[$key]=dowith_sql($value);
}
foreach ($_POST as $key=>$value)
{
$_POST[$key]=dowith_sql($value);
}
?>
我测试了一下,在两个foreach(){ } 数据块体中分别加了echo $_GET[$key]; 和 echo $_POST[$key];输入以下网址:http://localhost/sxsy/www/inc/GetPost.php?id=select&value=insert&c='&aa=into&bb=d
得到如下结果:
[select][insert]['][into]d
我又写了一个去除中括号的函数:
<?
function show_sql_keyword($str)
{
$refuse_str="and|or|select|update|from|where|order|by|*|delete|'|insert|into|values|create|table|database";
$arr=explode("|",$refuse_str);
for($i=0;$i<count($arr);$i++)
{
$replace="[".$arr[$i]."]";
$str=str_replace($replace,$arr[$i],$str);
}
return $str;
}
$str="[select] [insert] aaaa [it's not keyword]";
echo show_sql_keyword($str);
//显示:select insert aaaa [it's not keyword]
?>