SQL注入解决方案(PHP为例)

一、服务端配置

【打开安全模式】php.ini文件safe_mode=on;

【用户组安全】当safe_mode 打开时,safe_mode_gid被关闭,那么脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问。Safe_mode_gid=off

【安全模式下执行程序主目录】safe_mode_exec_dir=目录/程序/网页目录

【安全模式下包含文件】safe_mode_include_dir=文件路径

【控制php能访问的目录】open_basedir=可以访问的目录

【关闭危险函数】disable_functions=需要被禁用掉的函数名,例如system.passthru,exec,shell_exec,popen,phpinfo等,可以抵制PHPshell

【关闭PHP版本信息在http头中的泄露】expose_php=off

【关闭注册全局变量】PHP中提交的变量包括POST和GET提交的变量都将自动注册成为全局变量,能够直接访问服务器,这很不安全。Register_globals=off

【防止SQL注入】magic_quotes_gpc=on打开这个配置可以防止SQL注入,如果把它打开之后将自动把用户提交对SQL的查询进行转换。

【错误信息控制】一般禁止把服务器的错误信息(数据库连接或者其他错误信息,会暴露PHP脚本当前的路径信息或者查询的SQL语句),所以要禁止服务器错误提示display_errors=off,  显示错误信息一定要设置错误级别,比如只显示警告以上的信息error_reporting=E_WAINING&E_ERROR。建议不要开启错误提示。

【错误日志】建议在关闭display_errors之后通过日志把错误信息记录下来,便于查找服务器的错误,log_errors=on。以及错误日志的存放目录,error_log=错误日志存放路径。

二、Sql参数绑定防止注入:

<?php   

/**  

 * 模拟简单的绑定参数过程  

 *  

 * @param string $sql    SQL语句  

 * @param int $location  问号位置  

 * @param mixed $var     替换的变量  

 * @param string $type   替换的类型  

 */  

$times = 0;   

//这里要注意,因为要“真正的"改变$sql的值,所以用引用传值 

function bindParam(&$sql, $location, $var, $type) {   

    global $times;   

    //确定类型   

    switch ($type) {   

        //字符串   

        default:                    //默认使用字符串类型   

        case 'STRING' :   

            $var = addslashes($var);  //转义   

            $var = "'".$var."'";      //加上单引号.SQL语句中字符串插入必须加单引号   

            break;   

        case 'INTEGER' :   

        case 'INT' :   

            $var = (int)$var;         //强制转换成int   

        //还可以增加更多类型..   

    }   

    //寻找问号的位置   

    for ($i=1, $pos = 0; $i<= $location; $i++) {   

        $pos = strpos($sql, '?', $pos+1);    

    }   

    //替换问号   

    $sql = substr($sql, 0, $pos) . $var . substr($sql, $pos + 1);  

}   

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值