php 预处理 防注入,PHP防止sql注入小技巧之sql预处理原理与实现方法分析
本文实例讲述了PHP防止sql注入小技巧之sql预处理原理与实现方法。分享给大家供大家参考,具体如下:
我们可以把sql预处理看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。
我们来看下它有什么好处:
预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)。
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句。
预处理语句针对SQL注入是非常有用的,因为参数值发送后使用不同的协议,保证了数据的合法性。
这种预处理呢,可以通过两个方式,咱们这次要说的是mysqli。它任何时候都可以确保应用程序可以用相同的数据访问模式,比PDO要更加实用。
预处理呢,它有两种语句,一种是dml语句,另一种是dql语句。咱们先来看第一种:
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();
第二种呢,代码如下:
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."
";
}
$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防止sql注入小技巧之sql预处理原理与实现方法分析相关推荐
- sql server 小技巧(8) visual studio 2013里使用Sql server compact 4.0及发布问题处理
1. 安装 Microsoft SQL Server Compact 4.0 https://www.microsoft.com/zh-cn/download/confirmation.aspx?id ...
- SQL Sever 小技巧之解决外键约束(禁用、启用外键约束)
SQL Sever 小技巧之解决外键约束(禁用.启用外键约束) 因为有外键约束的存在,在从表中,修改主表不存在的数据是不合法的;在主表中,删除从表中已存在的主表信息也是不合法的. 当然方法总比困难多, ...
- SQL注入绕过关键词过滤的小技巧及原理(union select为例)
本文以联合查询关键字union select为例讲解绕过关键词过滤的一些方法.之所以了解绕过,关键是发现sqlmap有时候真的是不靠谱,只能指定命令跑.有一些简单过滤很容易绕过却不能检 ...
- spark sql合并小文件_Spark SQL小文件问题在OPPO的解决方案
Spark SQL小文件是指文件大小显著小于hdfs block块大小的的文件.过于繁多的小文件会给HDFS带来很严重的性能瓶颈,对任务的稳定和集群的维护会带来极大的挑战. 一般来说,通过Hive调度 ...
- sql日期大于某天_(十五)sql/Linux 小技巧
多表关联 with tt as (),tt2 as (),c as() select tt.d,c.t,count(distinct tt.user_id) as uv from tt left jo ...
- SQL防注入大全——史上最全的 SQL 注入资料
什么是 SQL 注入速查表? SQL注入速查表是可以为你提供关于不同种类 SQL注入漏洞 的详细信息的一个资源.这份速查表对于经验丰富的渗透测试人员,或者刚开始接触 Web应用安全 的初学者,都是一份 ...
- SQL性能优化15个小技巧
SQL性能优化15个小技巧 前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有 ...
- php7 mysql防注入_php如何防sql注入?
SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句.它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器. 攻击者可以使用SQL注入漏洞绕过应用程序安 ...
- SpringBoot防SQL注入
新建XssHttpServletRequestWrapper import java.io.BufferedReader; import java.io.ByteArrayInputStream; i ...
最新文章
- ad中电容用什么封装_干货 | 为什么单相电机要用电容,三相电机不需要电容?...
- 使用JavaScript选择GridView行的方法汇总
- SQL:查询学习笔记
- 怎么样用vue ui来创建一个vue项目
- linux前10ip,检查网口流量与前10名流量大IP
- 【源码类】开源项目汇总
- 浅谈MIPS地址对齐问题
- 减少Java垃圾收集开销的5条提示
- Mybatis源码之插件模块分析
- 移动端UI自动化Appium测试——Appium server两种启动方式
- php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
- IP归属地显示的简单实现代码
- 支持ECSHOP 2.73手机客户端
- 2018 Unite大会——《使用UPA工具优化项目》演讲实录
- macbook usb口突然不能用 解决方法
- uni-app中,文字超出隐藏并显示省略号(实现展开、收起全文)
- 编程初学者为什么要首选Java?
- 计算机文字录入技能竞赛,文字录入技能竞赛方案
- 网络验证 api.php,青柠网络验证webapi接口说明
- 众多虚幻游戏场景素材一键即可获取
热门文章
- HttpComponents分析之连接池实现
- struts2中action的class属性值意义
- _技巧_Chrome_Vimium插件_纯键盘控制浏览器
- 启动Tomcat服务时,出现org.apache.catalina.startup.VersionLoggerListener报错
- 1026. 程序运行时间(15)
- 配置Apacheserver
- .NET/C# 使用Stopwatch测量运行时间
- LeetCode OJ - Surrounded Regions
- HTTP请求上下文之终结:HttpContext类
- MySQL5.5安装到最后一步卡住的解决办法(即使删除了隐藏文件内C:\ProgramData的MySQL以后还是没解决问题)