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执行速度全攻略(下)
Oct 09 PHP
实现树状结构的两种方法
Oct 09 PHP
PHP安装攻略:常见问题解答(三)
Oct 09 PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 PHP
php中mysql模块部分功能的简单封装
Sep 30 PHP
学习php设计模式 php实现抽象工厂模式
Dec 07 PHP
php实现购物车功能(上)
Jul 23 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
Aug 02 PHP
php分享朋友圈的实现代码
Feb 18 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 isset()与empty()的使用区别详解
2010/08/29 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
JavaScript去掉空格的方法集合
2010/12/28 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
Angular.js中数组操作的方法教程
2017/07/31 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
使用原生js封装的ajax实例(兼容jsonp)
2017/10/12 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[49:12]完美世界DOTA2联赛PWL S2 Magma vs GXR 第二场 11.29
2020/12/02 DOTA
python3访问sina首页中文的处理方法
2014/02/24 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
大专生自我评价
2014/01/28 职场文书
大学自主招生推荐信
2014/05/10 职场文书
五水共治一句话承诺
2014/05/30 职场文书
超市工作总结范文2014
2014/12/19 职场文书
对PyTorch中inplace字段的全面理解
2021/05/22 Python
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB