1

我想问一下,当我使用 $_GET['something']; 时如何提高安全性 ?

我的意思是,我怎样才能防止人们直接从地址栏执行这些“获取”?因为我有一个测试页面,您可以在其中获得 XP 并从 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。有人可以告诉我如何防止这种情况吗?

4

2 回答 2

2

正如您所说,任何人都可以执行此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_*函数,它们已经过时并且为动态查询提供很少的安全性

于 2013-11-02T21:33:49.877 回答
0

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

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

所以你需要一些服务器端的授权码。(从你的问题中不清楚谁可以使用addxp,谁不可以。)

于 2013-11-02T21:26:26.163 回答