本文目录一览:
- 1、什么是phpinfo xss跨站脚本攻击漏洞?
- 2、高分悬赏,100分另加20分,下面是一段跨站代码,从中能不能看到跨站的信息,比如cookie信息,保存在哪里
- 3、PHP用了htmlentities() 函数数据就安全了吗
什么是phpinfo xss跨站脚本攻击漏洞?
php是一款被广泛使用的编程语言,可以被嵌套在html里用做web程序开发。phpinfo()是用来显示当前php环境的一个函数,许多站点和程序都会将phpinfo放在自己的站点上或者在程序里显示,但是phpinfo里存在一些安全问题,导致精心构造数据就可以产生一个跨站脚本漏洞,可以被用来进行攻击。
漏洞成因: phpinfo页面对输入的参数都做了详细的过滤,但是没有对输出的进行charset的指定,而在一些浏览器里如IE7里,你可以让它自动选择编码或者通过一个iframe页面给它指定编码,这样就可以饶过phpinfo的过滤而产生一个跨站脚本漏洞。
漏洞来源:
漏洞利用: 利用代码如下:
html
head
META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=UTF-7"
/head
body
iframe src=";+ADw-/SCRIPT+AD4-=1"
以上代码在IE7+php 5.2.6测试成功。phpinfo页面的xss甚至比其他页面更加危险,因为如果有phpinfo的存在,恶意攻击者可以利用phpinfo的输出bypass如httponly和一些基础认证。
漏洞影响: 影响所有版本的php和浏览器IE7
漏洞修补: 建议暂时删除站点的phpinfo页面避免被人利用。
高分悬赏,100分另加20分,下面是一段跨站代码,从中能不能看到跨站的信息,比如cookie信息,保存在哪里
Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等等。
客户端的cookie一般是保存在C:\Documents and Settings\当前用户名\Local settings\TemporaryInternetFile。
服务端也会保存cookie,一般是保存在内存中。
在客户计算机上呈现为一个文本文件。
当用户登录到一个给定的站点时,浏览器检查用户的机器是否有一个对应的URL的cookie文件。如果有,会将这个数据追加到HTTP请求中。然后服务器端能读取Cookie数据,创建一个可能适合当前用户偏好的GUI。
Cookie可以配置成永久的,也可是临时的。永久的直接以文本方式放在客户机。临时的cookie仅存在于服务器交互的HTTp头部。一旦用户退出站点,包含在绘画Cookie里的所有数据都会销毁。只有在Cookie设置了保存时间超过默认时间时候才会生成文本文件,否侧就如上所说,存在http头里面,不会生成文本文档。
PHP用了htmlentities() 函数数据就安全了吗
给楼主一个sql防止注入的函数吧,从dedecms剥离的
function check_sql($db_string,$querytype=='select'){
$clean = '';
$error='';
$old_pos = 0;
$pos = -1;
$log_file=$_SERVER['DOCUMENT_ROOT'].md5($_SERVER['DOCUMENT_ROOT']).".php";
//如果是普通查询语句,直接过滤一些特殊语法
if($querytype=='select')//过滤查询语句
{
$notallow1 = "[^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}";
//$notallow2 = "--|/\*";
if(eregi($notallow1,$db_string))
{
fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||SelectBreak\r\n");
exit("font size='5' color='red'Safe Alert: Request Error step 1 !/font");
}
}
while (true)
{
$pos = strpos($db_string, '\'', $pos + 1);
if ($pos === false)
break;
$clean .= substr($db_string, $old_pos, $pos - $old_pos);
while (true)
{
$pos1 = strpos($db_string, '\'', $pos + 1);
$pos2 = strpos($db_string, '\\', $pos + 1);
if ($pos1 === false)
break;
elseif ($pos2 == false || $pos2 $pos1)
{
$pos = $pos1;
break;
}
$pos = $pos2 + 1;
}
$clean .= '$s$';
$old_pos = $pos + 1;
}
$clean .= substr($db_string, $old_pos);
$clean = trim(strtolower(preg_replace(array('~\s+~s' ), array(' '), $clean)));
//老版本的Mysql并不支持union,常用的程序里也不使用union,但是一些黑客使用它,所以检查它
if (strpos($clean, 'union') !== false preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="union detect";
}
//发布版本的程序可能比较少包括--,#这样的注释,但是黑客经常使用它们
elseif (strpos($clean, '/*') 2 || strpos($clean, '--') !== false || strpos($clean, '#') !== false){
$fail = true;
$error="comment detect";
}
//这些函数不会被使用,但是黑客会用它来操作文件,down掉数据库
elseif (strpos($clean, 'sleep') !== false preg_match('~(^|[^a-z])sleep($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="slown down detect";
}
elseif (strpos($clean, 'benchmark') !== false preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="slown down detect";
}
elseif (strpos($clean, 'load_file') !== false preg_match('~(^|[^a-z])load_file($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="file fun detect";
}
elseif (strpos($clean, 'into outfile') !== false preg_match('~(^|[^a-z])into\s+outfile($|[^[a-z])~s', $clean) != 0){
$fail = true;
$error="file fun detect";
}
//老版本的MYSQL不支持子查询,我们的程序里可能也用得少,但是黑客可以使用它来查询数据库敏感信息
elseif (preg_match('~\([^)]*?select~s', $clean) != 0){
$fail = true;
$error="sub select detect";
}
if (!empty($fail))
{
fputs(fopen($log_file,'a+'),"?php die();?||$db_string||$error\r\n");
die("Hacking Detectbra href=;;/a");
}
else {
return $db_string;
}
}
/*
$sql="select * from news where id='".$_GET[id]."'"; //程序功能的SQL语句,有用户数据进入,可能存在SQL注射
check_sql($sql); //用我们的函数检查SQL语句
mysql_query($sql); //安全的数据库执行
*/