[英]How can I prevent this script from being freely accessed?
我正在尝试创建一个简单的PHP / MySQL消息系统。 以下代码是页面的一部分,显示用户已收到的messages.php
。 用户的消息已从MySQL中获取,并存储在变量$messages
。
foreach($messages as $message) {
// formatting, printing the text, etc.
echo '<a href="msg_del.php?id=' . $message['id'] . '">Remove</a>';
}
这是文件msg_del.php
:
<?php
$id = $_GET['id'];
// Connect to the database
require("../info/dbinfo.php");
$db_user = constant("DB_USER");
$db_pass = constant("DB_PASS");
$db_name = constant("DB_NAME");
$db_server = constant("DB_SERVER");
try {
$conn = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("DELETE FROM messages WHERE id = " . $conn->quote($id) . ";");
$stmt->execute();
}
catch(PDOException $e) {
echo "Error connecting to database!";
exit();
}
// Redirect to messages page
header("Location: messages.php");
exit();
?>
该代码具有完整的功能,但是问题是任何人都可以在浏览器中键入msg_del.php?id=SOMEID
并删除消息。 我怎样才能确保只能从messages.php
上的链接删除messages.php
呢?
您的请求中将需要某种令牌,以验证这确实是系统发出的有效请求。
一种方法是在请求中附加一个随机数 。 这样可以确保该请求来自您控制的表单,并且没有人使用旧表单来欺骗新请求。
您可以选择许多用于PHP的随机数库 。
该脚本需要知道当前用户是否有权执行该操作。 一种简单的方法是使用$ _SESSION变量。
就像是:
session_start();
if (!isset($_SESSION['user_id']) && /*permission logic here*/) {
//display an error message
die();
}
// database query here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.