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
php mail to 配置详解
Jan 16 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
php如何实现只替换一次或N次
Oct 29 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
eclipse php wamp配置教程
Jun 30 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
Sep 11 PHP
php封装的图片(缩略图)处理类完整实例
Oct 19 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP抽象类与接口的区别实例详解
May 09 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
PHP数组基本用法与知识点总结
Jun 02 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中Smarty模板初体验
2011/08/08 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
使用jquery实现IE下按backspace相当于返回操作
2014/03/18 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
node.js中的require使用详解
2014/12/15 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
jQuery Validate表单验证入门学习
2015/12/18 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
2017/09/07 Javascript
vue多次循环操作示例
2019/02/08 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
element-ui如何防止重复提交的方法步骤
2019/12/09 Javascript
jQuery实现日历效果
2020/09/11 jQuery
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
Python 音频生成器的实现示例
2019/12/24 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
汽车维修专业个人求职信范文
2014/01/01 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
致运动员的广播稿
2015/08/19 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
使用Redis实现分布式锁的方法
2022/06/16 Redis