2012-12-12 41 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

相關問題