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 相关文章推荐
网站当前的在线人数
Oct 09 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
php实现Linux服务器木马排查及加固功能
Dec 29 PHP
php实现的RSS生成类实例
Apr 23 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
PHP程序员不应该忽略的3点
Oct 09 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
PHP实现二维数组去重功能示例
Jan 12 PHP
cakephp常见知识点汇总
Feb 24 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 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函数常用用法小结
2010/02/08 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
Javascript连接多个数组不用concat来解决
2014/03/24 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
JS轮播图中缓动函数的封装
2020/11/25 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python实现快速多线程ping的方法
2015/07/15 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
如何安装多版本python python2和python3共存以及pip共存
2018/09/18 Python
numpy数组广播的机制
2019/07/12 Python
Tensorflow 多线程设置方式
2020/02/06 Python
python实现引用其他路径包里面的模块
2020/03/09 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
我的网上商城创业计划书
2013/12/26 职场文书
自我评价是什么
2014/01/04 职场文书
小学生获奖感言范文
2014/02/02 职场文书
公证委托书模板
2014/04/03 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
2015年民兵整组工作总结
2015/07/24 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python