首页 > php教程 > php手册 > 正文

PHP网页防范SQL注入方法配置

WBOY
发布: 2016-05-25 16:41:13
原创
1531 人浏览过

前提条件是我们需要有服务器的管理权限,就是可以修改php.ini文件了,下面我来介绍修改php配置文件来防范SQL注入方法有需要学习的朋友可参考.

为了安全起见,可以打开"php.ini"文件的安全模式,设置"safe_mode=On";显示 PHP 执行错误信息的 "display_erros"选项如果打开的话,将会返回很多可利用的信息给入侵者,因此要将其设置为"display_erros=off";这样,PHP 函数执行错误后的信息将不会在客户端的浏览器中进行显示.

此外,在文件还有一个很重要的配置选项,如果将其中的"magic_quotes_gpc"项设置为"On",PHP 程序会自动将用户提交的变量是含有的"'"、"""、""自动转为含有反斜线的转义字符,这个选项类似 ASP 程序中的参数过滤,可以对大部分字符型注入攻击起到防范的作用.

一段程序非常不错,如果你没有服务器管理权限,可以使用如下代码:

<?php
class sqlsafe {
    private $getfilter = "&#39;|(and|or)b.+?(>|<|=|in|like)|/*.+?*/|<s*scriptb|bEXECb|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)";
    private $postfilter = "b(and|or)b.{1,6}?(=|>|<|binb|blikeb)|/*.+?*/|<s*scriptb|bEXECb|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)";
    private $cookiefilter = "b(and|or)b.{1,6}?(=|>|<|binb|blikeb)|/*.+?*/|<s*scriptb|bEXECb|UNION.+?SELECT|UPDATE.+?SET|INSERTs+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)s+(TABLE|DATABASE)";
    /** 
     * 构造函数
     */
    public function __construct() {
        foreach ($_GET as $key => $value) {
            $this->stopattack($key, $value, $this->getfilter);
        }
        foreach ($_POST as $key => $value) {
            $this->stopattack($key, $value, $this->postfilter);
        }
        foreach ($_COOKIE as $key => $value) {
            $this->stopattack($key, $value, $this->cookiefilter);
        }
    }
    /** 
     * 参数检查并写日志
     */
    public function stopattack($StrFiltKey, $StrFiltValue, $ArrFiltReq) {
        if (is_array($StrFiltValue)) $StrFiltValue = implode($StrFiltValue);
        if (preg_match("/" . $ArrFiltReq . "/is", $StrFiltValue) == 1) {
            $this->writeslog($_SERVER["REMOTE_ADDR"] . "    " . strftime("%Y-%m-%d %H:%M:%S") . "    " . $_SERVER["PHP_SELF"] . "    " . $_SERVER["REQUEST_METHOD"] . "    " . $StrFiltKey . "    " . $StrFiltValue);
            showmsg(&#39;您提交的参数非法,系统已记录您的本次操作!&#39;, &#39;&#39;, 0, 1);
        }
    }
    /** 
     * SQL注入日志
     */
    public function writeslog($log) {
        $log_path = CACHE_PATH . &#39;logs&#39; . DIRECTORY_SEPARATOR . &#39;sql_log.txt&#39;;
        $ts = fopen($log_path, "a+");
        fputs($ts, $log . "rn");
        fclose($ts);
    }
}
登录后复制


教程链接:

随意转载~但请保留教程地址★

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!