1

实际上,我有一个收集信息并继续进行的登录表单。

现在我想确保只接收来自我的服务器提供的登录页面的请求,而不是任何其他使用相同参数访问我的 url 的页面。

提前感谢您的启发。

4

5 回答 5

1

最简单的方法——无论你的开发环境是什么——都是在登录时设置一个会话变量,然后让你的 servlet 检查那个特定的值。

于 2012-07-25T07:27:13.927 回答
0

In the login page:

<input type='hidden' name='access' value='granted'/>

In the page your login form redirects

if(isset($_POST)&&($_POST['access']=='granted')){
session_start();
$_SESSION['access']='granted'
}

On every page you want to control(except login):

if ($_SESSION['access']!='granted'){
die "Request denied!";
}
于 2012-07-25T07:44:00.660 回答
0

一个快速的解决方案是跟踪每个表单提交。

当您显示带有表单的页面时,您会在数据库表中添加一行:

submission_id | token | expire |

然后在您放置的页面中(在隐藏字段中,或在表单的操作中)submission_id。

当您收到表单的帖子时,您可以做所有您需要的检查(常见的有:每个submission_id只提交1个,过期时间)

于 2012-07-25T15:38:56.633 回答
0

可能有更好的方法,但这样的事情应该可以完成

if ($_SERVER["PHP_SELF"] == 'mydomain.com') {
    // do some stuff
} else {
    die "requests from external servers are denied!";
}

另请查看此链接以获取有关 CSRF 漏洞利用以及如何防止它们的良好解释:http ://en.wikipedia.org/wiki/Cross-site_request_forgery#Prevention

于 2012-07-25T07:25:48.353 回答
0

您可以在登录表单页面中发出某种一次性票证,然后在发送表单提交时检查它。

一个简单的例子是在登录页面请求的会话中设置一个标志。稍后提交表单时,您检查是否设置了标志。如果已设置,则允许处理并取消设置,因此无法再次使用。

请注意,这只会在提交之前强制请求登录表单。但它并不能阻止任何类型的攻击,如自动请求或跨站点请求伪造攻击,如果这是您想要完成的。

于 2012-07-25T15:29:50.143 回答