PHP防止sql注入小技巧之sql预处理原理与实现方法分析


Posted in PHP onDecember 13, 2019

本文实例讲述了PHP防止sql注入小技巧之sql预处理原理与实现方法。分享给大家供大家参考,具体如下:

我们可以把sql预处理看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。

我们来看下它有什么好处:

  • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
  • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
  • 预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。

这种预处理呢,可以通过两个方式,咱们这次要说的是mysqli。它任何时候都可以确保应用程序可以用相同的数据访问模式,比PDO要更加实用。

预处理呢,它有两种语句,一种是dml语句,另一种是dql语句。咱们先来看第一种:

<?php
header('Content-type:text/html;charset=utf-8');
$mysqli = new mysqli("127.0.0.1","root","root","test");
$mysqli->query('set names utf8');
$insert = $mysqli->prepare("insert admins (title,cookies,sta,lid) values (?,?,?,?)");
$title = "cuijinpeng";
$cookies = "luyaran201314";
$sta = "1";
$lid = 1;
$insert->bind_param("sssi",$title,$cookies,$sta,$lid);
$res = $insert->execute();
if($res){
  echo 1;
}else{
  echo $insert->error;
  echo 0;
}
$insert->close();
$mysqli->close();

第二种呢,代码如下:

<?php
header('Content-type:text/html;charset=utf-8');
$mysqli = new mysqli("127.0.0.1","root","root","test");
$mysqli->query('set names utf8');
$select = $mysqli->prepare("select id,title,cookies,sta,lid from admins where id > ?");
$id = "1";
$select->bind_param("i",$id);
$select->bind_result($id,$title,$cookies,$sta,$lid);
$select->execute();
while ($select->fetch()) {
  echo $id."---".$title."---".$cookies."---".$sta."---".$lid."<br>";
}
$select->close();
$mysqli->close();

接下来,咱们就该看下这两种语句分别支持什么样子的sql了。

第一种呢,它支持insert、update、delete这三种类型的sql,第二种嘞,就是查询语句了。

完事那个bind_param里的那个i,就是咱们传入参数的类型了,具体介绍如下:

  • i - integer(整型)
  • d - double(双精度浮点型)
  • s - string(字符串)
  • b - BLOB(binary large object:二进制大对象)

我们传入的每个参数都需要指定类,这样通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。

好啦,本次记录就到这里了。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
PHP脚本的10个技巧(8)
Oct 09 PHP
COM in PHP (winows only)
Oct 09 PHP
缓存技术详谈―php
Dec 14 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
php采集时被封ip的解决方法
Aug 29 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 PHP
PHP count()函数讲解
Feb 03 PHP
PHP session垃圾回收机制实例分析
Jun 28 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
Dec 13 #PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
Dec 13 #PHP
laravel通用化的CURD的实现
Dec 13 #PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 #PHP
phpstudy后门rce批量利用脚本的实现
Dec 12 #PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 #PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 #PHP
You might like
删除无限级目录与文件代码共享
2006/07/12 PHP
推荐文章系统(一)
2006/10/09 PHP
php模拟socket一次连接,多次发送数据的实现代码
2011/07/26 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
PHP中数组转换为SimpleXML教程
2019/01/27 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
vuejs选中当前样式active的实例
2018/08/22 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
angular *Ngif else用法详解
2020/12/15 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
python运行时间的几种方法
2016/06/17 Python
tensorflow获取变量维度信息
2018/03/10 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
Python中bisect的用法及示例详解
2020/07/20 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
python自动化办公操作PPT的实现
2021/02/05 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
缴纳养老保险的证明
2014/01/10 职场文书
特色冷饮店创业计划书
2014/01/28 职场文书
中学生期末评语
2014/02/03 职场文书
岗位竞聘书范文
2014/03/31 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
团委竞选演讲稿
2014/04/24 职场文书
新教师岗前培训方案
2014/06/05 职场文书
新教师培训方案
2014/06/08 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
小石潭记导游词
2015/02/03 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书