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 中的输出缓冲
Dec 21 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
php读取mysql的简单实例
Jan 15 PHP
php新浪微博登录接口用法实例
Dec 23 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php实现的mongodb操作类
May 28 PHP
PHP之密码加密的几种方式
Jul 29 PHP
抛弃 PHP 代价太高
Apr 26 PHP
PHP利用Socket获取网站的SSL证书与公钥
Jun 18 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
tp5框架使用composer实现日志记录功能示例
Jan 10 PHP
PHP autoload使用方法及步骤详解
Sep 05 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+jQuery翻板抽奖功能实现
2015/10/19 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
2017/02/17 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
js制作的鼠标悬浮时产生的下拉框效果
2012/10/27 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
2020/09/01 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
JavaScript装饰器函数(Decorator)实例详解
2017/03/30 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
vue实现长图垂直居上 vue实现短图垂直居中
2017/10/18 Javascript
JS求Number类型数组中最大元素方法
2018/04/08 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
浅析python协程相关概念
2018/01/20 Python
django query模块
2019/04/20 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
机电专业个人自荐信格式模板
2013/09/23 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
审计班子对照检查材料
2014/08/27 职场文书
二人合伙经营协议书
2014/09/13 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
地雷战观后感
2015/06/09 职场文书
信息技术国培研修日志
2015/11/13 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis