您知道如果要在PHP中重定向用户,可以使用标题函数:
header('Location: http://smowhere.com');
众所周知,在exit;
调用之后加上header
是一个好习惯,以防止执行其他php代码。所以我的问题是:标头位置调用后的代码能否有效执行?在哪些情况下?恶意用户能否完全忽略header('Location..')
电话?怎么样?
答案 0 :(得分:58)
可以有效执行header-location调用后的代码吗?
是的,永远。 header
只是要求浏览器重定向的一行数据。页面的其余部分仍然由PHP提供,客户端可以通过简单地阻止header
命令执行来查看。
这对于像wget
这样的命令行客户端来说很容易,例如,只是告诉它不要遵循重定向。
底线:如果你不阻止它,即使在header
电话后,PHP也会发送出全身。没有任何特殊的黑客技能,该机构完全可供收件人使用。
答案 1 :(得分:25)
如果您重定向但没有die()
/ exit()
,则始终会执行并显示代码。
采用以下示例:
admin.php的:
if (authenticationFails)
{
// redirect and don't die
}
// show admin stuff
如果您不确定在位置标题每个用户获得访问权限后结束执行。
答案 2 :(得分:8)
header()
指示PHP应该发送HTTP标头...发送HTTP标头时。
当你编写对header()的调用时,这些并不是立即发送的,但是当它发送它们的时候(通常,当PHP需要开始发送响应的主体时 - 这可能晚于你认为,当output_buffering
被启用时。
所以,如果你只是调用header()
,绝对保证不会执行在此语句之后编写的代码 - 除非你通过exit
/ {{表明它不能表示它1}}。
用户可以根据需要忽略die
标题;但是,Location
调用后的代码可能会执行也可能不执行,这一事实不会改变:该问题是服务器端的。
答案 3 :(得分:1)
将运行标头()之后的PHP代码。有时,这是必需的,因为php.net上的example显示。为了确保不是,你完全结束了程序流程。
答案 4 :(得分:1)
re:有效执行header-location调用后的代码吗?
如果您不关闭脚本,请单击“是”。
re:在哪些情况下?
在每种情况下。
恶意用户是否可以完全忽略标题(“位置..”)调用?
不,它会被解决,用户对此事没有发言权。
答案 5 :(得分:1)
如果没有退出调用,脚本终止的确切时间点将归结为两个因素:
假设浏览器立即启动重定向操作,只要它看到Location标头出现。这意味着它将关闭重定向所来自的连接,因此它可以开始连接到新位置。这通常意味着Web服务器将终止重定向脚本。无论标头从服务器 - >客户端进行,并且从客户端到服务器的TCP链接关闭过程需要多长时间才能使脚本继续运行。