我想问一下,当我使用$ _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。有人可以告诉我如何防止这种情况?
答案 0 :(得分: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_*
函数,它们已过时并且为动态查询提供的安全性很小
答案 1 :(得分:0)
基本上,你不能。有经验的用户可以阅读页面的HTML代码并形成GET查询(直接在浏览器的地址栏中)或POST查询(这将需要更多的工作,但仍有可能)。
安全服务器永远不应该信任客户端。
因此,您需要在服务器端使用一些授权码。 (从您的问题中不清楚谁被允许使用addxp
而谁不被使用。)