Php安全困境

时间:2014-06-22 15:46:05

标签: php mysql ios

我正在开发一个ios应用程序并通过它调用PHP文件。这一切都运行良好,但我的问题是,如果我只是输入我的浏览器的URL,我可以轻松运行PHP文件。这不是很安全,因为我运行的一个查询是获取存储在数据库中的谜题的答案。如果您只需输入URL即可获得解决方案,那么应用程序就不会太多了。

我从echo返回应用程序,只需从该字符串中提取所需内容。有没有办法从浏览器中隐藏字符串,但让我的应用程序可以看到它?

3 个答案:

答案 0 :(得分:1)

不是从PHP脚本返回答案,而是让应用程序发送尝试的解决方案,并根据服务器是否与数据库中的答案匹配,让服务器返回“是”或“否”。

作为防止作弊的额外保护,您可以在应用中包含一个必须用于“签署”请求的密钥(基本上,计算两端的cryptographic_hash(secret_key + request)并检查它们是否匹配)。请记住,专门的骗子可以对编译后的代码进行反向工程以找到这个密钥,但这会让他们的生活变得更加艰难。

您还可以对服务器进行编码,以检测是否有大量请求快速连续来自一个地方,以防止人们进行“暴力破解”试错,以找到正确的解决方案。同样,这不是牢不可破的,但可能会让一些人放弃。

修改由于您希望在应用中保留答案验证,而不是重新安排事情,以便在服务器上进行,因此有一个中途的房子:而不是解决方案的全部细节,服务器可以返回它的哈希(单向加密)。这样,应用程序仍然可以通过计算相同的哈希来检查它所具有的解决方案是否正确,但是只是读取数据的任何人都无法解决解决方案的问题,除了蛮力。

答案 1 :(得分:0)

传递特殊令牌。

就像'秘密密钥'。

这可能是通过嗅探或逆向工程获取密钥的最简单但很容易的。

如果有人想要窃取请求返回的数据,他们会很容易找到方法。现在有办法永久地防止这种情况。

答案 2 :(得分:0)

免责声明:这很复杂:P

您可以拥有一个提供令牌并存储它的PHP文件。

然后编写一个可逆的argorythm,它接受该字符串,对其进行编码(可能使用由点分隔的字符的ASCII值,每个字符乘以常量)并将其发送到服务器。

服务器解码它(对于我的例子:用点爆炸,除以常数,将每个数字转换为ASCII字符并内爆数组)

如果解码的字符串与存储在服务器上的字符串匹配,则执行任何操作并重新生成令牌。

即使黑客获得了服务器发送的令牌,他也无法在不知道算法和常量的情况下对其进行编码。

相关问题