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加入动态flash文件的生成的支持
Oct 09 PHP
扩展你的 PHP 之入门篇
Dec 04 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
php5与php7的区别点总结
Oct 11 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实现ODBC数据分页显示一例
2006/10/09 PHP
php下通过伪造http头破解防盗链的代码
2010/07/03 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
PHP在线生成二维码(google api)的实现代码详解
2013/06/04 PHP
如何使用“PHP” 彩蛋进行敏感信息获取
2013/08/07 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP生成静态HTML页面最简单方法示例
2015/04/09 PHP
PHP异常处理浅析
2015/05/12 PHP
php 判断IP为有效IP地址的方法
2018/01/28 PHP
javascript的对话框详解与参数
2007/03/08 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
JavaScript简单实现网页回到顶部功能
2013/11/12 Javascript
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
vue2.0父子组件及非父子组件之间的通信方法
2017/01/21 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
nuxt框架中对vuex进行模块化设置的实现方法
2019/09/06 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
python交易记录整合交易类详解
2019/07/03 Python
python3实现带多张图片、附件的邮件发送
2019/08/10 Python
python实现机器人卡牌
2019/10/06 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
英国当代时尚和街头服饰店:18montrose
2018/12/15 全球购物
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
销售员个人求职的自我评价
2014/02/10 职场文书
学习型班组申报材料
2014/05/31 职场文书
试用期自我评价范文
2015/03/10 职场文书