我正在使用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
谢谢
答案 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']))