我是否可以通过使用会话来防止 XSS 攻击


Can i prevent an XSS attack by using a session?

我们能否通过在用户每次加载页面时使用会话来防止XSS攻击?

这是我的PHP代码。

session_start();
if (isset($_GET["content"]) && isset($_GET["session"] && isset($_SESSION["code"])) {
    if ($_SESSION["code"] == $_GET["session"]) {
        echo $_GET["content"];
    }
}
$code = rand(1000, 9000);
$_SESSION["code"] = $code;
echo(str_replace("{CODE}", $code, $html);

例如,这是网址

http://example.com/index.php?content=xxxxx&session=GENERATED_SESSION

其中GENERATED_SESSION是我的JavaScript代码添加的代码。

这是一个将被 iframe 加载更多次的页面,代码可以阻止 XSS?

我认为您试图防止CSRF(跨站点请求伪造)而不是XSS(跨站点脚本)。

XSS可以防止人们将恶意代码注入您的应用程序,例如,如果您有一个带有评论表单的博客,则有人可以在您的评论框中输入JS <script></script>标签,以便当他们的评论加载到您的博客上时,JS被执行。

您的方法是防止CSRF的常用方法(尽管我不确定JS是从哪里进入的)。

生成一个"不可猜测"的令牌并将其存储在会话中,此令牌的值呈现在表单中的隐藏表单元素中,当有人提交您的表单时,您应该检查隐藏字段中的值是否与会话中的值匹配,就像您正在做的那样(没有语法错误:))。

不过,我个人会使用更好的机制来生成令牌,因为您生成的随机数可能会被"侥幸"。

附带说明一下,您通常应该只对搜索/读取请求使用 GET 方法,因此 CSRF 保护不会真正保护任何东西,并且您还需要考虑当用户刷新搜索时会发生什么。

每当您更改某些内容(即创建、更新或删除)时,最好使用 POST 表单方法,但相同的 CSRF 原则也适用。