从Android应用程序安全地写入远程数据库

时间:2012-04-11 22:56:36

标签: android database security

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

我想到的应用程序会有某种高分列表。我如何确保提交的高分值实际上是通过应用程序实现的?说这个人达到了9001分。现在,如果这只会导致某种类型的file.php?score = 9001,那么我对找到php-location并提交他们喜欢的内容感到不安全。

有关此类问题的任何意见?谢谢。

2 个答案:

答案 0 :(得分:3)

没有办法让这100%安全,因为你无法验证请求的来源,但有一种方法可以让它更难以破解高分。它仍然基本上是通过默默无闻的安全性,但它需要深入挖掘实际的应用程序二进制文件,而不仅仅是查看网络连接。

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

当然,这并不排除能够复制分数(一旦知道正确的哈希值,您可以根据需要多次提交分数)。如果您甚至想要阻止这一点,提交分数必须如下:从服务器请求(随机)ID号,哈希分数+ ID +密码,提交分数+哈希,服务器然后检查此哈希是否良好。服务器需要记住ID号,这样才能进行编程。 一个更简单的解决方案是将每个分数与玩家名称相关联,并且每个玩家仅允许1分。然后你可以哈希密码+名称+分数。

答案 1 :(得分:0)

下午好!

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

PHP示例:

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

if ($key == 'your_secret_string') {
   //write data to DB
}
?>