防止MySQL注入或HTML表单滥用的PHP程序


Posted in PHP onJanuary 21, 2009

MySQL注入的意图是接管网站数据库并窃取信息。常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管理信息。
MySQL之所以流行,是因为它与最流行的服务器端脚本语言PHP一起使用。而且,PHP是主导互联网的Linux- Apache服务器的主要语言。因此,这意味着黑客可以很容易地利用PHP就像Windows的间谍软件一样。
黑客向一个无担保的网页表单输入大量恶意代码(通过下拉菜单,搜索框,联系表单,查询表单和复选框)。
恶意代码将被送到MySQL数据库,然后“注入”。要查看这个过程,首先考虑以下基本的MySQL SELECT查询语句:
SELECT * FROM xmen WHERE username = ‘wolverine'
此查询会向有“xmen”表的数据库要求返回某一段MySQL中用户名为“wolverine”的数据。
在Web表单中,用户将输入wolverine,然后这些数据将被传到MySQL查询。
如果输入无效,黑客还有其他方法控制数据库,如设置用户名:
‘ OR '‘='‘
你可能认为使用正常的PHP和MySQL句法执行输入是安全的,因为每当有人输入恶意代码,他们将会得到一个“无效的查询”的消息,但事实并非如此。黑客很聪明,且因为涉及数据库清理和重设管理权限,任何一个安全漏洞都不容易纠正。
两种对MySQL注入攻击的常见误解如下:
1.网管认为恶意注入可用防病毒软件或反间谍软件清理。事实是,这种类型的感染利用了MySQL数据库的弱点。它不能简单地被任何反间谍软件或防病毒程序删除。
2. MySQL注入是由于复制了从另一台服务器或外部来源被感染的文件。事实并非如此。这种类型的感染是由于有人将恶意代码输入到网站不受保护表单,然后访问数据库。MySQL注入可通过删除恶意脚本清除掉,而不是使用防病毒程序。
用户输入验证流程
备份一个清洁的数据库,并放置在服务器外。输出一套MySQL表并保存在桌面。
然后转到服务器,先暂时关闭表单输入。这意味着表单不能处理数据,网站被关闭了。
然后启动清理进程。首先,在您的服务器上,清理遗留的混乱的MySQL注入。更改所有的数据库,FTP和网站的密码。
在最坏的情况下,如果你清理迟了,你可以再次检查在您服务器上运行的隐藏程序。这些隐藏程序是黑客安装的木马。将其完全删除并更改所有FTP权限。扫描服务器上所有木马程序和恶意软件。
当您修改PHP脚本程序时,将处理表单数据。防止MySQL注入的一个好办法是:连用户数据也不信任。用户输入验证对于防止MySQL注入是相当重要的。
设计一个过滤器筛选出用户输入,以下是几点提示:
1.输入到表单的是数字。你可以通过测试它等于或大于0.001 (假设你不接受一个零)验证它是不是数字。
2.如果是Email地址。验证其是否由允许的字符组合构成,如“ @ ” ,A-Z,a-z或一些数字。
3.如果是人名或用户名。可以通过是否包含任何非法字符验证它,如and和*,是可用于SQL注入的恶意字符。
验证数字输入
下面的脚本验证了是否输入一个从0.001至无限大的有效数字。值得一提的是,在一个PHP程序中,甚至可以允许使用一定范围内的数字。使用此验证脚本可确保输入到表单的只是一个数字。
假设在程序中有三个数字变量;您需要将它们进行验证,我们将它们命名num1 , num2和num3:

//Validate numerical input 
if($_POST['num1'] >= 0.001 && $_POST['num2'] >= 0.001 && $_POST['num3'] >= 0.001) 

{ 

} 

else 

{ 

} 

?>

And条件可被延长到能容纳超过三个数字。所以,如果你有10个,您将只需要扩展AND语句。
这可以用来验证一个只接受数字的表单,如合同数量,许可证号码,电话号码等。
验证文字和邮件地址的输入
以下可以用于验证诸如用户名,名字以及电子邮件地址的表单输入:
//Validate text input 
if (! preg_match('/^[-a-z.-@,'s]*$/i',$_POST['name'])) 

{ 

} 

else 

if ($empty==0) 

{ 

} 

else 

{ 

} 

?>

该验证脚本的一个优点是,它不接受空白输入。一些恶意用户还通过空白投入操纵数据库。使用上面的脚本,只验证一个文字变量, “ $name”。这意味着,如果有三个文字变量,你可以分别对每个变量设置一个验证脚本,以确保每一个变量都在进入数据库前通过了审查。
PHP 相关文章推荐
memcached 和 mysql 主从环境下php开发代码详解
May 16 PHP
PHP无刷新上传文件实现代码
Sep 19 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php的array数组和使用实例简明教程(容易理解)
Mar 20 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 PHP
php实现在限定区域里自动调整字体大小的类实例
Apr 02 PHP
详解如何在云服务器上部署Laravel
Jun 30 PHP
php实现简单的权限管理的示例代码
Aug 25 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
php 动态多文件上传
Jan 18 #PHP
PHP $_SERVER详解
Jan 16 #PHP
php 删除数组元素
Jan 16 #PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 #PHP
php array_flip() 删除数组重复元素
Jan 14 #PHP
PHP mkdir()定义和用法
Jan 14 #PHP
php array_intersect()函数使用代码
Jan 14 #PHP
You might like
php中截取字符串支持utf-8
2007/01/18 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
解决vue props 拿不到值的问题
2018/09/11 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Python简单计算文件夹大小的方法
2015/07/14 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
Python入门学习指南分享
2018/04/11 Python
python如何保证输入键入数字的方法
2019/08/23 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
优秀学生事迹材料
2014/02/08 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
中学生旷课检讨书模板
2014/10/08 职场文书
工商局个人工作总结
2015/03/03 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
vue中使用mockjs配置和使用方式
2022/04/06 Vue.js