0

我想我必须做某种 API,Android 应用程序将参数发送到 php 文件或类似文件。

我正在考虑一个具有某种高分列表的应用程序。我将如何确保提交的高分值实际上是通过应用程序实现的?假设此人达到 9001 分。现在,如果这只会导致某种 file.php?score=9001 调用,那么对于人们找到 php-location 并提交他们喜欢的任何内容,我感到不是很安全。

对这类问题有任何意见吗?谢谢你。

4

2 回答 2

3

由于您无法验证请求的来源,因此无法确保 100% 安全,但有一种方法可以让破解高分变得稍微困难​​一些。它基本上仍然是通过默默无闻的安全性,但它需要深入研究实际的应用程序二进制文件,而不仅仅是查看网络连接。

首先,为您的应用选择一个“密码”。不仅发送分数,还发送与分数连接的密码的加密哈希(例如,SHA-256 或其他东西)。在服务器端,重新计算与 score 连接的密码的哈希值,并检查它是否与提交的哈希值匹配。如果不是,则拒绝分数提交。现在这比最初的方法更安全,因为查看应用程序发出的请求不会让您伪造分数。但是,从应用程序中查看二进制代码仍将允许攻击者恢复密码并伪造分数提交,但这非常复杂,可能足以满足您的目的。

当然,这不排除能够复制分数(一旦知道正确的哈希值,您可以根据需要多次提交分数)。如果你甚至想阻止这种情况,提交分数必须这样:从服务器请求(随机)ID号,哈希分数+ID+密码,提交分数+哈希,然后服务器检查这个哈希是否正确。服务器需要记住 ID 号,所以这有点涉及到编程。一个更简单的解决方案是将每个分数与球员姓名相关联,并且每个球员只允许 1 个分数。然后你可以散列密码+名称+分数。

于 2012-04-11T23:09:19.010 回答
0

下午好!

最好通过 POST 与服务器通信。因此,您可以将附加参数(例如密钥)从您的应用程序发送到服务器并在那里检查。

PHP示例:

<?
$key = trim(htmlspecialchars($_POST['KEY']));

if ($key == 'your_secret_string') {
   //write data to DB
}
?>
于 2012-04-11T22:59:50.010 回答