php - 如何安全过滤用户提交的数据提交到数据库

 雅俊建安义琬 发布于 2022-11-24 09:15

sql注入总是无孔不入(ps:' or 1=1#),该如何安全的过滤好呢(我用的php和mysql_connect)?

2 个回答
  • select * from users where name = @name
    

    参数化查询(Parameterized Query 或 Parameterized Statement)是访问数据库时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值。

    在使用参数化查询的情况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有指令,也不会被数据库运行。Access、SQL Server、MySQL、SQLite等常用数据库都支持参数化查询。

    2022-11-24 09:19 回答
  • 可以使用 mysql_real_escape_string() 对字符串进行转义,然后再放进 SQL。

    $name = mysql_real_escape_string($_POST['name']);
    mysql_query('SELECT * FROM `users` WHERE `name` = "'.$name.'"');
    
    //改进版。防 SQL 注入,同时屏蔽 _ 和 % 字符
    function escape($str) {
      $str = mysql_real_escape_string($str);
      $str = str_replace(['_', '%'], ['\\_', '\\%'], $str);
      return $str;
    }
    
    

    这里有官方介绍:http://www.php.net/manual/zh/function.mysql-real-escape-string.php


    个人建议还是使用一个WEB框架,常见的WEB框架都有完善的防注入机制。
    例如:
    简单、快速入门的:CodeIgniter
    功能更全面的:Yii (这个官网有时会被墙)

    2022-11-24 09:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有