我有这个链接
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文件进行哪些更改?
答案 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)
编辑: 从获取变量中转义数据。