PHP+mysql防止SQL注入的方法小结


Posted in PHP onApril 27, 2019

本文实例讲述了PHP+mysql防止SQL注入的方法。分享给大家供大家参考,具体如下:

SQL注入

例:脚本逻辑

$sql = "SELECT * FROM user WHERE userid = $_GET[userid] ";

案例1:

SELECT * FROM t WHERE a LIKE '%xxx%' OR (IF(NOW=SYSDATE(), SLEEP(5), 1)) OR b LIKE '1=1 ';

案例2:

SELECT * FROM t WHERE a > 0 AND b IN(497 AND (SELECT * FROM (SELECT(SLEEP(20)))a) );

案例3:

SELECT * FROM t WHERE a=1 and b in (1234 ,(SELECT (CASE WHEN (5=5) THEN SLEEP(5) ELSE 5*(SELECT 5 FROM INFORMATION_SCHEMA.CHARACTER_SETS) END)) );

监控以下方法

SLEEP() — 一般的SQL盲注都会伴随SLEEP()函数出现,而且一般至少SLEEP 5秒以上
MID()
CHAR()
ORD()
SYSDATE()
SUBSTRING()
DATABASES()
SCHEMA()
USER()
VERSION()
CURRENT_USER()
LOAD_FILE()
OUTFILE/DUMPFILE
INFORMATION_SCHEMA
TABLE_NAME
fwrite()/fopen()/file_get_contents() — 这几个是PHP文件操作函数

应对方法:

1.mysql_escape_string() 转义特殊字符((PHP 4 >= 4.3.0, PHP 5))(mysql_real_escape_string必须先链接上数据库,否则会报错)

下列字符受影响:

\x00 //对应于ascii字符的NULL
\n  //换行符且回到下一行的最前端
\r //换行符
\ //转义符
'
"
\x1a  //16进制数

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

2.addslashes(): 函数返回在预定义字符之前添加反斜杠的字符串 (stripslashes()实现字符串还原)

预定义的字符有:

    单引号(')
    双引号(")
    反斜杠(\)
    NULL

3.prepared  statements(预处理机制)

<?php
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
 echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
/* Non-prepared statement */
if (!$mysqli->query("DROP TABLE IF EXISTS test") || !$mysqli->query("CREATE TABLE test(id INT)")) {
 echo "Table creation failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
/* Prepared statement, stage 1: prepare */
if (!($stmt = $mysqli->prepare("INSERT INTO test(id) VALUES (?)"))) {
 echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
/* Prepared statement, stage 2: bind and execute */
$id = 1;
if (!$stmt->bind_param("i", $id)) {
 echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
 echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
php用户注册页面利用js进行表单验证具体实例
Oct 17 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
PHP调用wsdl文件类型的接口代码分享
Nov 19 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
10个php函数实用却不常见
Oct 13 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
PHP文件上传操作实例详解
Sep 27 PHP
PHP+mysql+ajax轻量级聊天室实现方法详解
Oct 17 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 #PHP
PHP操作路由器实现方法示例
Apr 27 #PHP
PHP切割汉字的常用方法实例总结
Apr 27 #PHP
YII框架常用技巧总结
Apr 27 #PHP
YII框架行为behaviors用法示例
Apr 26 #PHP
YII框架模块化处理操作示例
Apr 26 #PHP
Yii框架ACF(accessController)简单权限控制操作示例
Apr 26 #PHP
You might like
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
深入php处理整数函数的详解
2013/06/09 PHP
PHP高级编程实例:编写守护进程
2014/09/02 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
Python实现FM算法解析
2019/06/18 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
CSS3中的@keyframes关键帧动画的选择器绑定
2016/06/13 HTML / CSS
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
Richards网上商店:当代时尚,遍布巴西
2019/11/03 全球购物
实习单位接收函
2014/01/11 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
使用Python开发冰球小游戏
2022/04/30 Python
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS