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 相关文章推荐
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php 操作符与控制结构
Mar 07 PHP
PHP中如何定义和使用常量
Feb 28 PHP
php二维数组排序详解
Nov 06 PHP
laravel安装和配置教程
Oct 29 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
PHP 搜索查询功能实现
Nov 29 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
php+js实现裁剪任意形状图片
Oct 31 PHP
PHP配置ZendOpcache插件加速
Feb 14 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
Mar 04 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桌面中心(二) 数据库写入
2007/03/11 PHP
PHP 日期加减的类,很不错
2009/10/10 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
php错误、异常处理机制(补充)
2012/05/07 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
纯js实现div内图片自适应大小(已测试,兼容火狐)
2014/06/16 Javascript
node.js不得不说的12点内容
2014/07/14 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
理解javascript封装
2016/02/23 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
nodejs的安装使用与npm的介绍
2019/09/11 NodeJs
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
Django后台获取前端post上传的文件方法
2018/05/28 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
如何通过Django使用本地css/js文件
2020/01/20 Python
水上运动奥特莱斯:Wasterports Outlet
2018/08/08 全球购物
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
幼儿园安全检查制度
2014/01/30 职场文书
优秀经理事迹材料
2014/02/01 职场文书
初中三好学生自我鉴定
2014/04/07 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
2014年档案室工作总结
2014/12/01 职场文书
教代会闭幕词
2015/01/28 职场文书
关于感恩老师的古诗句
2019/08/20 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
在Python中如何使用yield
2021/06/07 Python
Springboot-cli 开发脚手架,权限认证,附demo演示
2022/04/28 Java/Android
Redis基本数据类型List常用操作命令
2022/06/01 Redis