我们可以在每次用户加载页面时使用会话来阻止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?
答案 0 :(得分:3)
我认为您试图阻止CSRF(跨站点请求伪造)而不是XSS(跨站点脚本)。
XSS阻止人们将恶意代码注入您的应用程序,例如如果你有一个带有评论表单的博客,有人可以在你的评论框中输入一个JS <script></script>
标签,这样当他们的评论加载到你的博客上时,JS就会被执行。
您的方法是防止CSRF的常用方法(虽然我不确定JS在哪里进入)。
一个不可猜测的&#39;令牌生成并存储在会话中,此令牌的值在表单中的隐藏表单元素中呈现,当有人提交表单时,您应该检查隐藏字段中的值是否与会话中的值匹配,正如你所做的那样(没有语法错误:))。
我个人会使用一种更好的机制来生成令牌,因为你生成的随机数可能会被淹没&#34;。
另一方面,您通常只应使用GET方法进行搜索/读取请求,因此CSRF保护不会真正保护任何内容,您还需要考虑用户刷新搜索时会发生什么
每当您更改某些内容(即创建,更新或删除)时,最好使用POST表单方法,但适用相同的CSRF原则。