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 相关文章推荐
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
解析:使用php mongodb扩展时 需要注意的事项
Jun 18 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
ThinkPHP视图查询详解
Jun 30 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
分享一个Laravel好用的Cache宏
Mar 02 PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 PHP
详细解读PHP中接口的应用
Aug 12 PHP
比较完整的微信开发php代码
Aug 02 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
php 实现Hash表功能实例详解
Nov 29 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
PHP的运行机制与原理(底层)
2015/11/16 PHP
PHP类的特性实例分析
2016/09/28 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
Laravel 修改默认日志文件名称和位置的例子
2019/10/17 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
Ext JS Grid在IE6 下宽度的问题解决方法
2009/02/15 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
jquery zTree异步加载、模糊搜索简单实例分享
2016/03/24 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
讲解Python中if语句的嵌套用法
2015/05/14 Python
python实现猜数字小游戏
2020/03/24 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
python同步两个文件夹下的内容
2019/08/29 Python
python实现自动清理重复文件
2020/08/24 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
css3 按钮样式简单可扩展创建
2013/03/18 HTML / CSS
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
德国最新街头服饰网上商店:BODYCHECK
2019/09/15 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
小学生读书感言
2014/02/12 职场文书
开学典礼感言
2014/02/16 职场文书
高一学生评语大全
2014/04/25 职场文书
建筑学专业自荐书
2014/07/09 职场文书
工会趣味活动方案
2014/08/18 职场文书
高一化学教学反思
2016/02/22 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
创业计划书之便利店
2019/09/05 职场文书
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python