站长论坛

标题: php防止sql注入攻击的简单代码 [打印本页]

作者: superadmin    时间: 2008-4-17 14:55
标题: php防止sql注入攻击的简单代码
网上有不少关于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]
?>




欢迎光临 站长论坛 (http://www.tzlink.com/bbs/) Powered by Discuz! X3.2