Php html表单提交方法post和限制对post文件的访问
我有两个文件,index.html和code.php 在我的html页面中,我有一个表单,它在提交时发布到code.php,如下所示:Php html表单提交方法post和限制对post文件的访问,php,html,forms,redirect,Php,Html,Forms,Redirect,我有两个文件,index.html和code.php 在我的html页面中,我有一个表单,它在提交时发布到code.php,如下所示: <form method="post" action="code.php"> 我试图做的只是当用户单击html表单上的submit时,让公众可以访问code.php。我之所以尝试这样做,是因为当用户在sites.com/code.php中键入时,它会显示一个没有处理表单数据的页面,而且看起来很糟糕,所以我想限制code.php的访问权限 所以
<form method="post" action="code.php">
我试图做的只是当用户单击html表单上的submit时,让公众可以访问code.php。我之所以尝试这样做,是因为当用户在sites.com/code.php中键入时,它会显示一个没有处理表单数据的页面,而且看起来很糟糕,所以我想限制code.php的访问权限
所以基本上我想做的是,当用户访问sites.com/code.php时,他们会被重定向到index.html,但是如果他们浏览表单并点击submit,他们将能够访问已处理的code.php
我想到了不同的方法,其中一种方法是用一些php脚本更改code.php的chmod。因此,默认情况下code.php不可读,但如果用户单击submit,code.php wpud的chmod将更改为可读,从而显示页面,但是当用户仅访问code.php时,无法将其重定向到index.php
如果有什么好办法,请告诉我!
谢谢。只需设置重定向,如:
<?php
if(!isset($_POST['submit'])) //If form has not been submitted to get to this page
{
header('Location: http://www.domain.com/'); //Redirect
die; //Make sure script ends processing
}
//Rest of code.php
?>
这样,如果有人在所需的导航结构之外访问code.php,他们只会返回到索引
您还可以将所有内容保存在一个页面上,让表单自行提交,如果表单已提交,则包含通过require()或include()处理表单的代码,如果表单未提交或提交时出错,则显示表单,否则显示提交结果,因此,甚至没有公开存在外部php文件的事实。只需设置如下重定向:
<?php
if(!isset($_POST['submit'])) //If form has not been submitted to get to this page
{
header('Location: http://www.domain.com/'); //Redirect
die; //Make sure script ends processing
}
//Rest of code.php
?>
这样,如果有人在所需的导航结构之外访问code.php,他们只会返回到索引
您还可以将所有内容保存在一个页面上,让表单自行提交,如果表单已提交,则包含通过require()或include()处理表单的代码,如果表单未提交或提交时出错,则显示表单,否则显示提交结果,因此,甚至不暴露存在外部php文件的事实。您可以做的是在表单未发布时重定向回index.html页面 您可以通过检查REQUEST_METHOD变量来实现这一点
if($_SERVER['REQUEST_METHOD'] !== 'POST')
{
Header('Location: http://www.mysite.com/index.html');
exit;
}
您可以做的是在表单未发布时重定向回index.html页面 您可以通过检查REQUEST_METHOD变量来实现这一点
if($_SERVER['REQUEST_METHOD'] !== 'POST')
{
Header('Location: http://www.mysite.com/index.html');
exit;
}
另一种选择是检查code.php中的
HTTP\u referer
HTTP\u referer
提供当前用户访问页面的来源。如果HTTP\u referer
不是index.html
,您可以将用户重定向到index.html
<?php
$ref = $_SERVER["HTTP_REFERER"];
if ( $ref !== 'http://www.mydomain.com/index.html' )
{
header("Location:http://www.mydomain.com/index.html");
exit;
}
?>
另一种选择是检查code.php中的
HTTP\u referer
HTTP\u referer
提供当前用户访问页面的来源。如果HTTP\u referer
不是index.html
,您可以将用户重定向到index.html
<?php
$ref = $_SERVER["HTTP_REFERER"];
if ( $ref !== 'http://www.mydomain.com/index.html' )
{
header("Location:http://www.mydomain.com/index.html");
exit;
}
?>
最好使用IsSet($\u POST['submit'])进行检查,否则将给出未定义的数组索引错误警告。最好使用IsSet($\u POST['submit'])进行检查,否则将给出未定义的数组索引错误警告。这不是一个可靠的解决方案,因为某些浏览器配置为忽略referer标头。是,我也了解到,它不太可靠。依赖REQUEST_方法会更好。这不是一个可靠的解决方案,因为有些浏览器配置为省略referer头。是的,我也知道它不太可靠。依靠REQUEST_方法会更好。