我可以通过使用会话来阻止XSS攻击吗?

时间:2016-01-13 20:18:21

标签: javascript php xss

我们可以在每次用户加载页面时使用会话来阻止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);

例如,这是URL

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

您的方法是防止CSRF的常用方法(虽然我不确定JS在哪里进入)。

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

我个人会使用一种更好的机制来生成令牌,因为你生成的随机数可能会被淹没&#34;。

另一方面,您通常只应使用GET方法进行搜索/读取请求,因此CSRF保护不会真正保护任何内容,您还需要考虑用户刷新搜索时会发生什么

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