我创建了一个桌面应用程序,用户可以从他们自己的机器上下载和运行它。此应用程序需要网络访问,并且通常会通过更新、插入等将更改发送到数据库(托管在我的服务器上)。
直接在应用程序中保留密码是不好的,因为如果应用程序被反编译,那么用户可以看到数据库的凭据并自行获得完全访问权限。
在服务器端使用 GET 和 POST 以及 API 是唯一安全的方法吗?还有其他选择吗?
所以这里有 2 个问题:1) 验证向您的服务器端 PHP/数据库发布 POST 更新的用户(他们就是他们所说的身份)和 2) 防止您的数据库凭据被暴露。
1) 您是否使用 LDAP 之类的第 3 方集成服务器对用户进行身份验证?
2)服务器凭据不应该存储在应用程序中,因为那里永远不需要它们。一旦你验证了一个用户和他们的请求,你的服务器端 PHP 应该有一个安全功能,它可以解密数据库凭据并根据用户提交的信息发出 SQL 语句。
因此,要回答您的问题,是的,最好的做法是托管一个服务器端框架来处理传入请求,该框架对用户进行身份验证,然后执行他们的请求。
我想如果您希望桌面应用程序能够直接更新数据库(不推荐),您可以存储数据库凭据的加密哈希并使用解密算法进行解密,然后将它们发送到数据库。
<?php
if(isset($_POST['query'])) {
$query = $_POST['query'];
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
//Execute SQL
if($mysqli->query($query) === TRUE) {
$mysqli->close();
echo "successful";
} else { echo "SQL execution error"; }
} else {
echo "invalid query string";
}
?>
你为什么不建立一个代理网络服务?您的客户端应用程序发送请求,您的网络服务获取它们并在您的数据库上安全地执行它们。