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

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

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

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

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

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

$name = mysql_real_escape_string($_POST[‘name‘]);

然后,让请求过来的变量成为参数,而不是SQL语言本身。

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

当然,这种写法还是比较粗糙。

所以,一般都会推荐使用PDO 或者是MYSQLI的prepare() excute()方法。

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

关于PDO::prepare()

这样做的好处就是,你不再需要担心查询请求会插入一些SQL语句,因为这些语句都将会当作是请求变量(一个字符串或者是数字),不再会误以为是SQL语言本身。这样可以大大的减少SQL注入的机会。

时间: 2024-10-24 21:25:19

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

目前日向博客对xss跨站脚本注入和sql注入的防范

昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无线循环弹出框的脚本,估计这个脚本之后他再想输入也没法了. 类似这种: <html> <body onload='while(true){alert(1)}'> </body> </html> 我立刻认识到这事件严重性,它说明我的博客有严重安全问题.因为xss跨站脚本攻击可能导致用户Co

SQL注入与防范

SQL注入简介: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句. SQL注入方法: 一.拼接字符串(通过输入框输入SQL语句使其改变原意) Select * from T_User where UserID

Hibernate使用中,防止SQL注入的一些措施

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. 在获取便利操作的同时,SQL的注入问题也值得我们的密切注意,下面就来谈谈几点如何避免SQL注入: 1.对参数名称进行绑定: Query query=session.createQuery(hql); query.setString("name",name); 2.对参数位置进行邦定: Query query=session.cre

API安全(二)-SQL注入与防范

1.什么是注入攻击 使用了用户输入的但是我们没有校验过的数据,来拼装一个可以行的指令,交给系统去执行,结果导致执行了我们不希望发生的命令.注入攻击用很多种,最常见的是SQL注入. 2.SQL注入攻击 Java程序员知道,使用Statement进行查询时会造成SQL注入攻击,从而使用PreparedStatement来进行SQL预编译,从而有效的防止SQL注入攻击.但是日常开发中,我们一般多使用框架来进行数据库操作,如JdbcTemplate.Spring-Data-Jpa.Mybatis等,但是

sql注入以及防范

登陆验证注入: //万能用户名失效 //万能密码 xx' or 1='1 //万能用户名 xxx' union select * from users/* $sql="select * from users where username='$username' and password='$password'"; //万能密码 33 union select * from users //万能用户名 89 union select * from users;/* $sql="

java sql 注入 与防范

1.注入 2 .预防 package com.jdbc; import java.sql.*; import java.util.Scanner; public class loginDemo { public static void main(String[] args)throws ClassNotFoundException, SQLException { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.连接 String

MySQL防范SQL注入风险

0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本低.收益大,颇受各层次的黑客们所青睐. 一般来说,SQL注入的手法是利用各种机会将恶意SQL代码添加到程序参数中,并最终被服务器端执行,造成不良后果. 例如,我们访问接口 http://imysql.com/user.php?userid=123 来根据userid获取用户信息,假设程序中是这么处理的: $sql = “SELE

记录一下学习PDO技术防范SQL注入的方法

最近学习了使用PDO技术防范SQL注入的方法,在博客里当做一次笔记.若果有新的感悟在来添上一笔,毕竟也是刚开始学习.一. 什么是PDO PDO全名PHP Data Object PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据. 二.如何去使用PDO防范SQL注入?/防范sql注入这里使用quate()方法过滤特殊字符和通过预处理的一些方式以及bindPar

SQL注入其实很简单,别一不留神就被利用了

SQL注入这个词相信大家应该都不陌生,而且每年都会有这样子的事情发生,下面我先带大家回忆11年两期起比较经典的案例事件: 1.SONY索尼事件2011年4月,著名的×××组织Anonymous***SONY一个网站,一星期后才被发现7千万的用户个人信息,其中包括姓名.地址.E-mail.出生日期.用户名.密码以及购买记录的数据信息,随后的一些其他服务器也被相继攻破 2.CSDN数据泄露门2011年底,国内各大网站被爆出"密码泄露门",最先公布的是著名技术网站CSDN600万账户和密码泄