博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pdo mysql mysqli教程_从MySQL更改为MySQLi或PDO
阅读量:7000 次
发布时间:2019-06-27

本文共 950 字,大约阅读时间需要 3 分钟。

安全问题来自所谓的SQL injection . 为了理解如何使其更安全,您必须首先了解其工作原理 . 使用一个非常糟糕的查询的基本示例:

mysql_query('SELECT FROM user WHERE username="'.$_POST['username'].'" AND password="'.$_POST['username'].'"');

这个查询有两个主要的问题 . 第一个也是最明显的是,添加了值而没有对它们进行卫生处理 . 这是SQL注入的典型示例 . 在此示例中,用户可以提交用户名,如下所示 .

'admin" --';

那现在有什么不好的?因为我们没有过滤这个(主要是为了引用)它使我们的查询看起来像这样:

SELECT * FROM user WHERE username="admin" --" AND password="'.$_POST['username'].'"

要完全理解这一点,你必须知道 -- 是内联注释的开头(很像PHP中的 // ),并且在数据库运行后没有任何内容 . 鉴于此,这就是我们留下的 .

SELECT * FROM user WHERE username="admin"

现在,如果我们通过查看它是否返回一行来进行密码验证,并且有一个名为 admin 的帐户并不合理,我们就会有人在没有使用密码的情况下登录 .

第二个不太明显的问题是发送密码并使用查询进行验证 . 如果我们以这种方式构建它(psudo代码):

SELECT password FROM user WHERE username="admin"

if( returned password == submitted password )

他们仍然需要密码,因为我们在代码(应用程序层)而不是数据库中进行评估 .

如果注入变量, mysql , mysqli 或 PDO 将无法保护您 . PDO和MySQLi允许您使用处理该问题的预准备语句 . 如果您问我以下原因,PDO会更好 .

不依赖于MySQL数据库(数据库不可知)

允许命名占位符,例如 :name 或仅 ? 索引占位符

更好的OOP支持

通常支持更多功能

但如果你不了解威胁,那么没有人可以保证你的安全 .

转载地址:http://jbevl.baihongyu.com/

你可能感兴趣的文章
菜菜从零学习WCF九(会话、实例化和并发)
查看>>
HDUOJ----专题训练C
查看>>
面向服务的体系结构(SOA)——(4)对于服务的理解
查看>>
Linux网络设置1——Linux网络环境配置
查看>>
hdu 2112 HDU Today (floyd算法)
查看>>
找工作--Java相关
查看>>
paxos 实现
查看>>
网站框架策划时的小技巧--页面原型篇
查看>>
linux驱动移植的重要数据结构
查看>>
推荐25款很棒的 HTML5 开发框架和开发工具【上篇】
查看>>
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
查看>>
组策略--下发文件到计算机
查看>>
数据库事务性
查看>>
封装CIImage实现实时渲染
查看>>
log4delphi使用(转)
查看>>
5月23日Google就宣布了Chrome 36 beta
查看>>
设计模式---工厂模式Factory(创建型)
查看>>
C++ Primer 学习笔记_91_用于大型程序的工具 --命名空间
查看>>
window.print实现打印特定控件或内容
查看>>
前端必读:浏览器内部工作原理
查看>>