php如何防止sql注入

php如何防止sql注入


12345678_0001
浏览 646回答 4
4回答

开心每一天1111

select ,insert,update,delete,and,*等或通过系统函数addslashes对内容进行过滤php配置文件中register_globals=off;设置为关闭状态.(作用将注册全局变量关闭);如接收POST表单的值使用$_POST['user'],假设设置为ON的话$user才接收值sql语句书写的时候尽量不要省略小引号(tab上面那个)和单引号提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,使之不易被猜中对于常的方法加以封装,避免直接暴漏SQL语句开启PHP安全模式safe_mode=on打开magic_quotes_gpc来防止SQL注入,默认为关闭,开启后自动把用户提交sql查询语句进行转换把"'"转换成"\'"控制错误信息输出,关闭错误信息提示,将错误信息写到系统日志使用MYSQLI或PDO预处理

跃然一笑

如果是字符串类型:addslashes() 这个函数,转义单双引号;如果接收的参数属于整数型(id之类):intval() 直接取出数字,丢弃后边的非数字字符;或者使用PDO预处理语句,绑定参数的方式防止SQL注入。

慕容3067478

废弃plain SQL ,强制使用参数化查询(并且是上述的真•参数化查询)这其实没有解决任何问题,首先,使用plain SQL的需求是真实存在的,当然我们假设可以通过空的参数列表来变相进行plain SQL的查询,那这和plain SQL又有何区别,其次,参数化查询仍然是由“带参数的SQL”和参数列表两部分组成的,无法识别和避免程序员在第一部分采用拼接完全抛弃SQL,提供结构化的接口,例如类似select(tableName, fields, condition)这种机制这会使得接口异常复杂,且不一定应付得了复杂查询,想想LINQ吧

qq_遁去的一_1

这个方法比较多,这里简单举个例子:提交的变量中所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的转义字符,给SQL注入带来不少的麻烦。 请看清楚:“麻烦”而已~这并不意味着PHP防范SQL注入,书中就讲到了利用改变注入语句的编码来绕过转义的方法,比如将SQL语句转成ASCII编码(类似:char(100,58,92,108,111,99,97,108,104,111,115,116…)这样的格式),或者转成16进制编码,甚至还有其他形式的编码,这样以来,转义过滤便被绕过去了// 去除转义字符   12345678910111213141516function stripslashes_array($array) {    if (is_array($array)) {        foreach ($array as $k => $v) {            $array[$k] = stripslashes_array($v);        }    }     else if (is_string($array)) {        $array = stripslashes($array);      }   return $array;  }   @set_magic_quotes_runtime(0);   // 判断 magic_quotes_gpc 状态   if (@get_magic_quotes_gpc()) {     $_GET = stripslashes_array($_GET);    $_POST = stripslashes_array($_POST);    $_COOKIE = stripslashes_array($_COOKIE);   }PHP防范SQL注入的代码 123$keywords = addslashes($keywords); $keywords = str_replace("_","\_",$keywords);//转义掉”_” $keywords = str_replace("%","\%",$keywords);//转义掉”%” 
打开App,查看更多内容
随时随地看视频慕课网APP