php 使用PDO,防止sql注入 简单说明
PDO:php5
假如以下是一个简单的登录处理:
使用PDO连接mysql首先:
新建数据库
new PDO("mysql:host=localhost;dbname=test","root","root");
host:服务器
dbname:数据库名
后面两个分别是帐号和密码
默认不是长连接
如果想使用长连接需要在后面加入参数:
new PDO("mysql:host=host;dbname=name","user","pw","array(PDO::ATTR_PERSISTENT => true) ");
看如下简单示例,在这里是单独说明,所以我没有加其他的东西:
<?php//接收前端传过来的变量$name=$_POST['username'];$pwd=$_POST['password'];//这里新建PDO连接,在这里我是本地测试的所以host我使用了localhost 数据库名为test,帐号为root密码也是root$stmt = new PDO("mysql:host=localhost;dbname=test","root","root");//使用prepare进行预处理,其中:name和:pwd是我们等下要传入的变量值,这些都是占位符$stmt = $stmt->prepare('SELECT * FROM user1 WHERE user1 = :name and pw1 = :pwd');//以上的准备都做好了之后,我们使用execute()方法负责执行准备好的查询//该方法需要有每次迭代执行中替换的输入参数,在这里就是:name和:pwd 作为数组将值传递给方法//从而值替换掉其中占位符//当然也可以使用bindParam,但是我还是喜欢这种简单的方式,毕竟人懒$stmt->execute(array('name' => $name,'pwd'=>$pwd));while ($row = $stmt->fetch()) {print_r($row);}
注释已经说明了要说的内容,最后面使用while输出查询到的值,这样就可以防止sql注入,如果不行,那么请自行测试,输入如:’ or 1=1#
我们看我们的’ or 1=1#,如果我们的name输入的是’ or 1=1#,注意 ’ or 1=1# 前面有一个单引号,那么如果我们的sql语句本是如下:
SELECT * FROM user1 WHERE user1='123' AND pw1='234'
把user1的值改为了 ’ or 1=1# 后。
变成了
SELECT * FROM user1 WHERE user1='' OR 1=1# and pw1='234'
其中由于sql中#代表:到此结束,那么说明后面的:and pw1=’234’都将无效,那么我们的sql语句就等于变成了如下语句:
SELECT * FROM user1 WHERE user1='' OR 1=1
由于1=1是肯定成立的,那么此句sql语句中的where条件将会永远正确,此时,语句变成或者说就等于了如下语句:
SELECT * FROM user1 WHERE TRUE
或者说:
SELECT * FROM user1
那么就会登录成功,绕过了此次登录。
php 使用PDO,防止sql注入 简单说明相关推荐
- php使用mysql预处理语句防止sql注入 简单讲解及代码实现
目录 前言 sql注入简单介绍 一个例子 使用预处理语句 简介 预处理语句的查询 预处理语句获取查询结果 总结 前言 最近在做一个小项目的后台,牵扯到登录等等需要操作数据库的地方,为了安全起见,特地来 ...
- mysqli与pdo防sql注入源码
1.mysqli防注入 <?php//定义配置文件$config = [//地址"host" => "127.0.0.1",//数据库名称" ...
- 每日分享-sql注入简单检测小工具(仅供参考学习)
python版本:3.9.6 代码如下: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import requests url = 'http://localho ...
- 从PDO下的SQL注入思路到获得GIT 3000star项目0day
0x01 PDO简介 PDO全名PHP Data Object PDO扩展为PHP访问数据库定义了一个轻量级的一致接口.PDO提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以使用相同的函 ...
- TOP16榜首之SQL注入<宝藏文--- 工具实战演习 > -- -- 小黑渗透工程栈( 基础篇3 )
之前两篇文章对sql注入做了简单详细的说明,这里会先做一下实战演习,然后会简单结合工具burp suite 和 sqlmap演示,以及对工具的使用说明. 此靶场为DVWA,下面链接是关于DVWA安装教 ...
- 网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
网络安全实验3 前言 Kali 常用指令 工具教程 ettercap 基本使用 一.口令破解 John the ripper 破解 linux 密码 l0phtcrack7 破解 windows 密码 ...
- 常见的SQL注入类型
一.SQL注入原理 SQL注入简单原理 * 二.常见的SQL注入类型 注:?为php语言中的输入符 (1).按注入点区分: 1.数字型注入 数字型注入主要存在于网站的url中有?id=处,如:http ...
- pymysql模块和SQL注入
目录 1.sql复习和分表操作 2.pymysql模块 2.1 pymysql的使用步骤 2.1 pymysql 增删改 1.数据提交和数据回滚 3.sql注入 1. 什么是SQL注入 2.非安全方式 ...
- php pdo sql注入,「原创」PHP实战-PDO优化及 SQL注入
PDO优化,SQL注入攻击 PDO SQL语句预处理 PDO SQL语句预处理的步骤 第1步:制作相同结构的SQL 将SQL语句不同的数据部分,用参数或问号来代替. 第2步:将相同结构的SQL语句预编 ...
最新文章
- nodejs原生模块简介
- CAN总线简明易懂教程(一)
- 获取python工程下面的所需的所有开源依赖包
- SQL中Case when 方法的使用
- oracle yyyy和yy,Oracle PL / SQL:SYSDATE与’DD-MMM-YY’的区别?
- pro*C/C++支持c++开发实例
- P1678 烦恼的高考志愿
- AIOps中异常检测简的单应用
- 【Java学习笔记之十一】Java中常用的8大排序算法详解总结
- lol最克制诺手的英雄_LOL“英雄恐惧症”,当你上单遇到诺手时,你会用什么英雄对线...
- 第六章 线性回归 学习笔记下
- Java数组去掉重复的方法集
- Eigen教程3----矩阵、向量以及标量的运算,转置、共轭以及伴随矩阵
- 【深度相机系列二】深度相机原理揭秘--飞行时间(TOF)
- 网络工程师工作经验分享
- python pip中的Fatal error in launcher错误及解决
- TensorFlow案例---概率学中的逆概率
- html字体图标设置
- 数据库原理及应用-李唯唯主编-实验3-4
- 1. 设计数据库结构
热门文章
- Kubernetes Liveness and Readiness Probes
- Newtonsoft 六个超简单又实用的特性,值得一试 【下篇】
- 从零搭建分布式文件系统MinIO比FastDFS要更合适
- 阿捷外传之Git代码统计:DotNetCore + PowerBI 实现Git仓库日志分析
- ABP vNext中使用开源日志面板 LogDashboard
- 基于Masstransit实现Eventbus的功能
- PYPL 7月榜单公布:Java份额出现下降趋势
- .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
- WebAssembly和Blazor:解决了一个存在十年的老问题
- .NET Core 3.0之创建基于Consul的Configuration扩展组件