0

我正在使用 WAMP 并在本地托管 PHP 文件。

假设我有这两个文件。

customer.php - 添加客户详细信息的表单

recordCustomer.php - 连接到数据库并将信息存储在数据库中(所有处理完成的地方)

如何通过在地址栏中键入文件名来阻止用户访问文件recordCustomer.php

http://localhost/testing/recordCustomer.php has to be redirected and given an error message

然而

http://localhost/testing/customer.php is allowed

谢谢

4

3 回答 3

1

问题不在于访问,recordCustomer.php而是如果访问是直接的,则执行代码这一事实。例如,阻止通过 htaccess 访问会使您的表单无法提交。

您应该在customer.php表单中使用随机令牌。令牌被保存到会话中并插入到带有隐藏输入的表单中。

recordCustomer.php你只需要检查是否给出了令牌以及它是否与会话中的令牌匹配。

如果匹配 => 这是对recordCustomer.php
else 的合法调用 => 尝试绕过您的表单,请拒绝该请求。

这是 CSRF 攻击的学校案例;)

看看这里例如

于 2012-09-19T09:10:32.300 回答
1

您不必阻止对整个recordCustomer.php的访问,您只需在recordCustomer.php的开头检查调用该页面的用户是否有权修改他在表单中发送的记录。如果没有,则显示错误。

我给你贴了一些代码,这样你就明白了。

recordCustomer.php的伪/php 代码:

if (! isset($_SESSION['user_logged'])) {
    echo 'You have to be logged in to access this page (this incident will be logged)';
    exit;
}

$user = $_SESSION['user_logged']; //this was saved when the user logged in
$record = $_POST['record_to_modify'];

if (!user_can_modify_record($user, $record)) {
    echo 'You dont have permission to access that record (this incident will be logged)';
    exit;
}

//HERE THE REST OF recordCustomer.php

function user_can_modify_record($user, $record) {
   $set = db_query("select user from table where user = '". $user. "' and record_id = ". $record);
   return db_count_rows($set) > 0;
}
于 2012-09-19T09:30:39.677 回答
0

您可以通过检查来简单地检查是否正在从表单请求文件:

if(isset($_POST['submit']))

于 2012-09-19T09:12:47.913 回答