一直以来WEB的安全都是非常严峻的话题。其中SQL注入是较为常见的攻击手段,很多时候,我们的代码都是为了处理不合规的数据,防止注入。但PHP作为弱类型语言,总是有我们未能考虑到的风险。本文分享了一个简单却很有效的防止SQL注入的方法!

记得很久以前看到过一位大牛说过的一句话,在一个程序中,60%的代码都应该是在进行各种防御。

其实,现在来看,防御sql注入其实并不需要进行各种参数过滤,以下将开启干货模式!

PHP5.x开始引入了一种新的mysql操作方式-----mysqli,在php中也有一项相应的操作方式叫做PHP预处理。采用面向对象的方式来进行参数化绑定操作,由于对数据库操作的模式驱动不同,因此可以非常有效的防御sql注入。

首先,我们先来看一段代码例子prepare($search_sql);//进行预处理操作

$search_action ->bind_param("s",$keywords);//绑定参数,第一个参数表示为上面预处理的的占位符的数量和每一个参数的数据类型,s为字符串,i为整形,d为双精度小数,有几个参数,就写几个s或d或i,比如说iiii,ssss,sidi这样的。然后后面就是有几个参数就写几个要绑定的变量,比如bind_param('sss',$username,$password,$code);

$search_action ->bind_result($content);//将结果绑定在相对应的变量上,比如你select了username,password,你就可以写bind_result($usernmae,$password);

$search_action ->execute();//执行sql操作

while($search_action ->fetch()){

echo $content.'
';

}

$search_action ->free_result();//释放内存

$search_action ->close();//结束这个实例化

?>

上面是php预处理中一个非常简单的例子,它内置的其他函数能很方便我们的开发速度,那么看到这里,很多人可能还是不明白,有人可能想问,你这个绑定参数是不是还是在拼凑sql语句?如果是拼凑语句,那还不是会产生注入吗

这就要从他的操作原理来解释了,其实它在prepare操作中,就已经在数据库中,执行了语句,以后的绑定参数和执行,只不过是再传递数据进去而已,所以根本不会和sql语句拼接,也就自然不会将危险代码执行。因此,在这种模式下sql注入就能很有效的被防御了。

在php预处理的类中有很多很好用的操作,具体将会在以后的文章中为大家总结一些常用的php预处理的开发语句。

相关推荐:

php sql注入教程,PHP简单高效防御sql注入的方法分享相关推荐

  1. SQL注入教程——(四)宽字节注入

    前言 在mysql中,用于转义(即在字符串中的符号前加上"\")的函数有addslashes,mysql_real_escape_string,mysql_escape_strin ...

  2. Mysql数据库的简单备份与还原_简单的MySQL备份与还原方法分享

    为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyA ...

  3. 两种简单高效的“反人脸识别”方法

    Bakunov开始在工作时间,研究如何防止被人脸识别.日前,他公开表示自己已经与其他几个黑客一起,开发出了一种"反人脸识别算法". Grigory Bakunov是俄罗斯搜索巨头Y ...

  4. java编写sql语句,java实现简单的给sql语句赋值的示例

    代码本身很简单.拼接sql的时候?不好数,简单的用来赋值. /** * TODO 循环赋值,缺少的类型可随时添加 * @author Lucius * @param pt * @param list ...

  5. 《SQL 入门教程》第01篇 SQL 简介

    <SQL 入门教程>专栏目录 第01篇 SQL 简介 第02篇 查询初体验 第03篇 查询条件 第04篇 结果排序 第05篇 限定结果数量 第06篇 分组与汇总 第07篇 多表连接查询 第 ...

  6. 一种简单高效的灰度图画圆方法——使用MATLAB实现每个像素点只计算一次就把圆画出来

    初衷 今天有同学问我:怎么在灰度图上画一个圆? 我想:OpenCV不是直接有画圆的函数吗?哦,他是MATLAB. 我搜了一下好像没有内置的(没仔细找,可能没看到),别人手工写的算法都是遍历整副图像才可 ...

  7. php删除sql server 2008,MSSQL_SQL Server2008 数据库误删除数据的恢复方法分享,SQL Server中误删除数据的恢复本 - phpStudy...

    SQL Server2008 数据库误删除数据的恢复方法分享 SQL Server中误删除数据的恢复本来不是件难事,从事务日志恢复即可.但是,这个恢复需要有两个前提条件: 1. 至少有一个误删除之前的 ...

  8. sqlmap注入教程linux,Linux Sqlmap检测sql注入漏洞工具安装使用教程

    Sqlmap工具 什么是SQLmap? SQLmap是一款用来检测与利用SQL注入漏洞的免费开源工具,有一个非常棒的特性,即对检测与利用的自动化处理(数据库指纹.访问底层文件系统.执行命令) sql注 ...

  9. SQL进阶教程 | 史上最易懂SQL教程 5小时零基础成长SQL大师

    目录 第一部分:基础--增删查改 [第一章]做好准备 Getting Started (时长25分钟) [第二章]在单一表格中检索数据 Retrieving Data From a Single Ta ...

  10. SQL进阶教程 | 史上最易懂SQL教程 5小时零基础成长SQL大师(5)

    [十二章]数据类型 介绍 MySQL的数据分为以下几个大类: String Types 字符串类型 Numeric Types 数字类型 Date and Time Types 日期和时间类型 Blo ...

最新文章

  1. keras 的 example 文件 mnist_hierarchical_rnn.py 解析
  2. Python__封装
  3. 神经网络 online problem class反馈
  4. 前端公共库CDN加速
  5. Ubuntu 14.04下编译WebRTC
  6. Linux中实用但很小众的11个炫酷终端命令
  7. 黑金花大理石_石材用上黑金花,一看就是富豪家
  8. leetcode题解767-重构字符串
  9. MySQL之存储引擎,数据类型,约束条件
  10. 开课吧:教你认识C++基本程序
  11. (转载)排序六 堆排序
  12. 最受欢迎的30款开源软件
  13. 百度自然语言处理开放接口使用代码
  14. Win10关闭显示器后立即锁定
  15. python 等差素数数列
  16. 云服务器进不了超星_超星自动答题搭建本地和云服务器题库(Java版)
  17. 不小心把苹果手机忘记密码锁屏了怎么办
  18. _kbhit()以及_getch()函数的用法
  19. APB简介及verilog代码示例
  20. JavaWeb-仿小米商场(8) 订单支付[沙箱支付]

热门文章

  1. 基于Unity的极乐净土/others MMD动画制作
  2. Python中函数介绍及其使用
  3. matlab函数xlsread函数,matlab中xlsread函数
  4. web页面视频播放器选型
  5. C语言--求质数(详解)(筛选求质数)
  6. Windows系统连接Linux的常用网管工具下载
  7. weka安装需要java不_如何下载安装Weka机器学习工作平台
  8. 手把手带你玩转Spark机器学习-Spark的安装及使用
  9. SOUI中View类型的控件数据更新的例子
  10. FDDB人脸检测测试集使用方法