你知道如果你想在PHP中重定向一个用户,你可以使用header函数:
header('Location: http://smowhere.com');
众所周知,在header调用之后加上一个exit;是一个很好的做法,可以防止其他php代码的执行。头位置调用后的代码是否可以有效执行?在哪些情况下?恶意用户是否可以完全忽略header('Location..')调用?如何执行?
header
exit;
header('Location..')
kmb7vmvb1#
头位置调用之后的代码是否可以有效执行?是的,总是这样。header只是一行数据,* 要求 * 浏览器重定向。页面的其余部分 * 仍然由PHP提供 *,客户端只需阻止header命令执行即可查看。对于像wget这样的命令行客户机来说,这很容易做到,例如,只需告诉它不要跟随重定向即可。底线:如果你不阻止它,PHP甚至会在header调用后发送整个正文,接收者不需要任何特殊的黑客技巧就可以完全使用这个正文。
wget
lsmepo6l2#
如果您重定向但没有die()/exit(),则始终执行并显示代码。请看下面的例子:admin.php:
die()
exit()
if (authenticationFails) { // redirect and don't die } // show admin stuff
如果您不确保在位置标题后结束执行,每个用户都将获得访问权限。
mxg2im7a3#
header()指示PHP应该发送一个HTTP头...当HTTP头被发送时。当您编写对header()的调用时,这些消息不会立即发送,而是在需要发送它们时 (通常,当PHP需要开始发送响应主体时--当启用output_buffering时,这可能比您想象的要晚) 发送。因此,如果您只调用header(),则绝对不能保证在此语句之后编写的代码不被执行--除非您使用exit/die指明它不能被执行。如果用户愿意,他可以忽略Location报头;但是它不会改变header()调用之后的代码可能执行也可能不执行的事实:这是服务器端的问题。
header()
output_buffering
exit
die
Location
rks48beu4#
header()后面的PHP代码将被运行。有时候,这是必需的,如www.example.com上的examplephp.net所示。为了确保不是这样,您需要完全结束程序流。
3lxsmp7m5#
如果没有退出调用,脚本终止的确切时间点将取决于两个因素:1.客户端浏览器对重定向的React速度1.执行脚本的其余部分所需的时间。假设浏览器一看到Location头就立即启动重定向操作,这意味着它会关闭重定向的连接。这样它就可以开始连接到新的位置。这通常意味着Web服务器将终止重定向脚本。无论标头从服务器-〉客户端和TCP链接关闭过程从客户端-〉server是脚本可以保持运行的时间量。
6tqwzwtp6#
是的,如果你不关闭脚本。
在所有情况下。
不,它会被要求用户在这件事上没有发言权。
6条答案
按热度按时间kmb7vmvb1#
头位置调用之后的代码是否可以有效执行?
是的,总是这样。
header
只是一行数据,* 要求 * 浏览器重定向。页面的其余部分 * 仍然由PHP提供 *,客户端只需阻止header
命令执行即可查看。对于像
wget
这样的命令行客户机来说,这很容易做到,例如,只需告诉它不要跟随重定向即可。底线:如果你不阻止它,PHP甚至会在
header
调用后发送整个正文,接收者不需要任何特殊的黑客技巧就可以完全使用这个正文。lsmepo6l2#
如果您重定向但没有
die()
/exit()
,则始终执行并显示代码。请看下面的例子:
admin.php:
如果您不确保在位置标题后结束执行,每个用户都将获得访问权限。
mxg2im7a3#
header()
指示PHP应该发送一个HTTP头...当HTTP头被发送时。当您编写对header()的调用时,这些消息不会立即发送,而是在需要发送它们时 (通常,当PHP需要开始发送响应主体时--当启用
output_buffering
时,这可能比您想象的要晚) 发送。因此,如果您只调用
header()
,则绝对不能保证在此语句之后编写的代码不被执行--除非您使用exit
/die
指明它不能被执行。如果用户愿意,他可以忽略
Location
报头;但是它不会改变header()
调用之后的代码可能执行也可能不执行的事实:这是服务器端的问题。rks48beu4#
header()后面的PHP代码将被运行。有时候,这是必需的,如www.example.com上的examplephp.net所示。为了确保不是这样,您需要完全结束程序流。
3lxsmp7m5#
如果没有退出调用,脚本终止的确切时间点将取决于两个因素:
1.客户端浏览器对重定向的React速度
1.执行脚本的其余部分所需的时间。
假设浏览器一看到Location头就立即启动重定向操作,这意味着它会关闭重定向的连接。这样它就可以开始连接到新的位置。这通常意味着Web服务器将终止重定向脚本。无论标头从服务器-〉客户端和TCP链接关闭过程从客户端-〉server是脚本可以保持运行的时间量。
6tqwzwtp6#
是的,如果你不关闭脚本。
在所有情况下。
不,它会被要求用户在这件事上没有发言权。