浅谈php运用mysql注入问题危害以及预防 ***

访客3年前黑客资讯784

登录无论get还是post,传过的数据如果不过滤,就可以通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.

在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,等价于下面代码

 select * from user where username='' or 1=1

这也就是早期网友口中的万能密码。修复也是很简单的。就把关键字符过滤即可。

*** 1最简单

mysql_real_escape_string -- 转义 SQL 语句中使用的字符串中的特殊字符,并考虑到连接的当前字符集 !

*** 2

打开magic_quotes_gpc来防止SQL注入。php.ini中有一个设置:magic_quotes_gpc = Off这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,比如把 ' 转为 \'等,对于防止sql注射有重大作用。
如果magic_quotes_gpc=Off,则使用addslashes()函数
<?php  
 $field = explode(',', $data);  
 array_walk($field, array($this, 'add_special_char'));  
 $data = implode(',', $field);  
 /** 
 * 对字段两边加反引号,以保证数据库安全 
 * @param $value 数组值 
 */ 
 function add_special_char(&$value)  
 {  
    if ('*' == $value || false !== strpos($value, '(') || false !== strpos($value, '.') || false !== strpos($value, '`')) {  
        //不处理包含* 或者 使用了sql *** 。  13     } else {  
       $value = '`' . trim($value) . '`';  
    }  
    return $value;  
}  
 /* 函数名称:inject_check() 
 函数作用:检测提交的值是不是含有SQL注入的字符,保护服务器安全 
 参  数:$sql_str: 提交的变量inject_check($id) { exit('提交的参数非法!'); 
 返 回 值:返回检测结果,true or false 
 */ 
 function inject_check($sql_str)  
{  
     return preg_match('/^select|insert|and|or|create|update|delete|alter|count|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile/i', $sql_str); // 进行过滤  28 }  
 //递归ddslashes
 function daddslashes($string, $force = 0, $strip = FALSE)  
 {  
    if (!get_magic_quotes_gpc() || $force) {  
        if (is_array($string)) {  
             foreach ($string as $key => $val) {  
                $string [$key] = daddslashes($val, $force);  
             }  
         } else {  
             $string = addslashes($strip ? stripslashes($string) : $string);  
         }  
     }  
 return $string;  
 }  
 //递归stripslashes 
function dstripslashes($string)  
 {  
    if (is_array($string)) {  
       foreach ($string as $key => $val) {  
           $string [$key] = $this->dstripslashes($val);  
       }  
     } else {  
        $string = stripslashes($string);  
    }  
    return $string;  
 }


标签: PHP教程

相关文章

抖音无水印ajax解析下载html源码

仅以学习为目的,源码全部开源无加密,接口源码教程看https://www.isiyuan.net/?post=97 前端是某论坛看到的,致谢。源码调用了bootstrap和layer等开源产品。...

学习笔记Mysql-相关知识

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL是一个轻量级的数据库,与PHP配合使用效果非常好,...

PHP 常用的header头部定义汇总(转)

思源简单整理 <?php header('HTTP/1.1 200 OK'); // ok 正常访问 header('HTTP/1.1 404 Not Found'); //通知浏览器 页面不存...

PHP发短信实现方法

1要拼接接收的手机号和短信 public function sendcode()     {         $parpm = input();         $valist = $this-&g...

PHP检测每一段代码执行时间(加载时间)

<?php // 实例1 /**  * @start time  */ function proStartTime() {     global $startTime;     $mtime1...

思源工具箱抖音api解析接口更新

<?php header('Access-Control-Allow-Origin:*'); header('Content-Type:text/json;charset=utf8'); /*...