检测此PHP文件中的漏洞

时间:2011-08-08 13:22:42

标签: php security xss

我有这个链接

  

http://example.com/example.php?link=<link>&title=<title>&bild=<picturelink>&named=<text>

&lt;&gt;中的每个术语代表变量,可以由一个卑鄙的攻击者改变。

<named> = domain-name of <link>

这是处理php文件

<?php
if(strpos($_GET[named],"known.com")!==false or 
   strpos($_GET[named],"known2.com")!==false or 
   strpos($_GET[named],"known3.com")!==false)
{
echo '<div align="center"><a href=' . 
     $_GET[link] . 
     ' target="_blank"><img alt="' . 
     htmlentities(utf8_decode($_GET[title])) . 
     '"  title="' . htmlentities(utf8_decode($_GET[title])) . 
     '"  src=' . $_GET[bild] . 
     '  border=0></a></div><br><br><b>' . 
     htmlentities(utf8_decode($_GET[title])) . 
     '</b><br><br><a  href=' . 
     htmlentities($_GET[link]) . 
     ' target="_blank" style="color: grey;">Text <i>' . 
     htmlentities(utf8_decode($_GET[title])) . '</i> text ' . 
     htmlentities($_GET[named]) . '!</a><br>(text)';
}
else
{
echo 'not allowed';
}
?>

你怎么能被攻击,你建议对php文件进行哪些更改?

4 个答案:

答案 0 :(得分:5)

逃离您的数据!!!

任何用户输入都不应该直接放入HTML中,或者他们可以插入Javascript并窃取会话等等。

使用以下内容:htmlspecialchars($_GET['link'])

另请参阅:http://en.wikipedia.org/wiki/Cross-site_scripting#Exploit_scenarios

答案 1 :(得分:1)

http://example.com/example.php?link=></a><script>alert('Pwned');</script><a&title=blaba&bild=blabla&named=known.com

此网址产生以下HTML:

<div align="center">
    <a href=></a>
        <script>alert('Pwned');</script>
    <a target="_blank">
        <img alt="blabla"  title="blabla"  src=blabla  border=0>
    </a>
</div>
<br><br>
<b>blabla</b><br><br>
<a  href=blabla target="_blank" style="color: grey;">Text <i>blabla</i> text known.com!</a><br>(text)

您可以在其中看到有效的<script>标记

答案 2 :(得分:0)

打印这些变量时,您应该始终将它们转换为实体。所以,在这种情况下,你忘记了一些变量。

$_CLEAN = array();
foreach($_GET as $key => $value) {
    $_CLEAN[$key] = htmlentities($value);
}

而不是回显$ _GET,你应该回显$ _CLEAN

答案 3 :(得分:-2)

编辑: 从获取变量中转义数据。