我已向管理员添加了功能,因此它会在您要求您登录之前保留您尝试访问的网址。所以,如果你去:
/admin/foo/bar?baz
它会将您重定向到:
/admin/auth/login
登录后,在我的功能插件之前,你总是去/admin/user/profile
。现在,我将/admin/foo/bar?baz
保存在会话变量$_SESSION['from']
中。
在登录<form>
中,隐藏值采用会话的值:
<input type="hidden" name="from" value="<?php echo htmlspecialchars($_SESSION['from'];)?>">
然后,在提交表单后,会发生重定向:
header('Location: ' . $_POST['from'] );
我已经看到了与XSS和htmlspecialchars有关的其他问题,并且我知道它不会修复所有可能的XSS尝试,但是这会成功地对抗“低级别”XSS尝试吗?
答案 0 :(得分:0)
虽然这里没有XSS攻击,但如果您使用的是较旧版本的PHP,则会打开HTTP header injection,这在某些情况下会更糟。
如果您要从HTTP引荐来获取要返回的URL,那么 应该得到足够的保护,确保URL是你< / em>由parsing it控制,然后只存储返回路径和查询字符串。执行最终重定向时,应确保路径的组件正确进行URL编码。您可以将返回URL完全存储在会话中,而不是将其退回给用户以便在登录期间进行操作。