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 相关文章推荐
将PHP作为Shell脚本语言使用
Oct 09 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
php中jpgraph类库的使用介绍
Aug 08 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
php自定义函数实现二维数组排序功能
Jul 20 PHP
PHP的mysqli_sqlstate()函数讲解
Jan 23 PHP
PHP htmlspecialchars()函数用法与实例讲解
Mar 08 PHP
关于Curl在Swoole协程中的解决方案详析
Sep 12 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 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
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
2014/10/22 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
如何优雅地改进Django中的模板碎片缓存详解
2018/07/04 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
python中的线程threading.Thread()使用详解
2019/12/17 Python
html5本地存储之localstorage 、本地数据库、sessionStorage简单使用示例
2014/05/08 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
制药工程专业毕业生推荐信
2013/12/24 职场文书
网络技术专业求职信
2014/02/18 职场文书
剪彩仪式主持词
2014/03/19 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
初中英语课后反思
2014/04/25 职场文书
大学新生军训方案
2014/05/03 职场文书
2016年“世界环境日”校园广播稿
2015/12/18 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
python获取淘宝服务器时间的代码示例
2021/04/22 Python
总结高并发下Nginx性能如何优化
2021/11/01 Servers