PHP 关于SQL注入的防范措施。

    最近在使用框架的时候仍是有点不安,不知道框架的设计者有没有考虑到SQL-Injection的问题,我在顶层需不须要作一些必要的过滤等等,由此我特地的去StackOverflow看了下,真是获益良多,而后我去看了下框架的DB库的内部方法,而后就比较安心了。分享下国内外PHP程序员在处理SQL-Injection的一些方案。php


    国外广泛都推荐,只要你是使用查询都应该作到两点:1.prepared statements(准备好的声明) 2.parameterized queries (参数化的查询请求)mysql

我一开始也不理解这个是什么意思,后来看他们举例就大概知道了。比较安全的SQL,你须要一开始对查询的变量进行准备。如:程序员

$name = $_POST['name'];
$sql = 'select * from user where name'.$name;

那么最好就是对$name先处理下,sql

$name = mysql_real_escape_string($_POST['name']);
//

而后,让请求过来的变量成为参数,而不是SQL语言自己。安全

$sql = 'select * from user where name=\''.$name.'\'';

固然,这种写法仍是比较粗糙。框架

因此,通常都会推荐使用PDO 或者是MYSQLI的prepare() excute()方法。.net

$stmt = $pdo->prepare('SELECT * FROM user WHERE name = :name');
$stmt->execute(array('name' => $name));

关于PDO::prepare()
设计

这样作的好处就是,你再也不须要担忧查询请求会插入一些SQL语句,由于这些语句都将会看成是请求变量(一个字符串或者是数字),再也不会误觉得是SQL语言自己。这样能够大大的减小SQL注入的机会。code

相关文章
相关标签/搜索