禁用对文件的URL访问

时间:2012-09-19 09:01:44

标签: php mysql url redirect

我正在使用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

谢谢

3 个答案:

答案 0 :(得分:1)

问题不在于访问recordCustomer.php,而是在访问是直接的情况下执行代码的事实。 例如,阻止htaccess访问将使您的表单不可更改。

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

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

如果匹配=>这是对recordCustomer.php的合理要求 else =>试图绕过你的表格,拒绝请求。

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

看看here例如

答案 1 :(得分: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;
}

答案 2 :(得分:0)

您只需检查以下内容,即可检查是否正在从表单中请求文件:

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