2012-12-12 38 views
0

我已经创建了一个桌面应用程序,用户可以从他们自己的机器上下载并运行。此应用程序需要网络访问权限,并且经常会将更改发送到更新,插入等数据库(托管在我的服务器上)。如何安全地允许我的用户连接到我的数据库?

直接在应用程序中保留密码是不好的,因为如果应用程序反编译,那么用户可以查看数据库的凭据并自行获得完全访问权限。

在服务器端使用GET和POST以及API执行此操作是唯一安全的方法吗?还有其他选择吗?

回答

1

所以这里有两个问题:1)认证用户发布POST更新到你的服务器端PHP /数据库(他们是他们说的人)和2)防止暴露数据库凭证。

1)您是否使用LDAP等第三方集成服务器验证用户身份?

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"; 
    } 
?> 
+0

身份验证是一个单独的问题(因为我发出请求并不重要),但是,是的,#2是我所了解的。 尽管存储散列,但除非将解密算法存储在服务器上,否则它仍然不安全。 – sdasdadas

+1

这是真的......如果PHP安装在您的服务器上,它可能就像一个PHP页面一样简单,该页面接收在桌面应用程序中构造的_POST ['query']字符串,并使用存储在服务器上的数据库凭据执行它侧。 – jamis0n

+0

用最简单的PHP页面更新答案:) – jamis0n

1

为什么不建立一个代理web服务? 您的客户端应用程序发送请求,您的Web服务抓住它们并在您的数据库上安全地执行它们。

+0

这就是我所认为的正确的做法。如果有另一种方式来处理它而不暴露信息,我大多很好奇。 – sdasdadas

相关问题