会员登录 | 会员注册 | 意见建议 | 网站地图

站长资源综合门户

当前位置:首页 > 站长学院 > 编程程序 > PHP漏洞全解

PHP漏洞全解

时间:2012-04-16 18:41:07   作者:   来源:   点击:

        charset 可选,表示使用的字符集
函数会将下列特殊字符转换成html编码:
& —-> &
" —-> "
‘ —-> ‘
< —-> <
> —-> >

$_SERVER["PHP_SELF"]变量的跨站
在某个表单中,如果提交参数给自己,会用这样的语句
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST">
……
</form>
$_SERVER["PHP_SELF"]变量的值为当前页面名称
例:
.sectop/get.php
get.php中上述的表单
那么我们提交
.sectop/get.php/"><script>alert(document.cookie);</script>
那么表单变成
<form action="get.php/"><script>alert(document.cookie);</script>" method="POST">
跨站脚本被插进去了
防御方法还是使用htmlspecialchars过滤输出的变量,或者提交给自身文件的表单使用
<form action="" method="post">
这样直接避免了$_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 显示留言

页面  sos/show.php?id=71 可能存在注入点,我们来测试

sos/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函数分别转换单精度和双精度浮点型参数

分享到:

网友评论

热门编程程序