$_GET (?add=value) security


$_GET (?add=value) security

我想

问一下,当我使用 $_GET['something']] 时,我怎样才能提高安全性; ?

的意思是,我怎样才能防止人们直接从地址栏执行这些"获取"?因为我有一个测试页面,您可以在其中获得经验值,并从XP中获得等级。

它看起来像这样:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<label for="addxp"><font color="yellow">Add XP:</font></label> <input type="text" name="xpadd"><br>
<input type="submit">
</form>
$xpadd = $_GET['xpadd'];
    mysql_query("UPDATE users SET xp=xp + '" . $_GET['xpadd'] . "' WHERE user_id='" . $_SESSION['user_id'] . "'") ;

正在工作,但是当我在浏览器的地址栏中输入它时:http://mywebsite.com/xp.php?xpadd=50 它为我的积分增加了 50 XP。有人可以告诉我如何防止这种情况吗?

正如你所说,任何人都可以执行这个GET请求 - 因此你不能阻止人们这样做。

您需要在代码中验证是否允许当前登录的用户执行此类命令。只有在此验证成功后,才执行更新。

一种选择是在表中保留一个标志并检查这是设置/取消设置(取决于您的业务逻辑)

例如:

SELECT 1 FROM users WHERE user_id = ? AND is_allowed_xp_update = 1

仅当返回 true 时,才执行更新

UPDATE users SET xp = xp + ? WHERE userid = ? AND is_allowed_xp_update = 1

还使用替代数据库库,然后使用mysql_*函数,它们已过时,并且为动态查询提供很少的安全性

基本上,你不能。有经验的用户可以读取页面的HTML代码并形成GET查询(直接在浏览器的地址栏中)或POST查询(这需要更多的工作,但仍然是可能的)。

安全服务器永远不应该信任客户端。

因此,您需要在服务器端使用一些授权代码。(从您的问题中不清楚谁可以使用addxp,谁不能。