2017-05-22 24 views
0

我有一個Android應用程序,我試圖使用PHP/MySQL。從PHP選擇(MySQL)回到Android(C#)

我在C#/ Android中獲取PHP訪問結果時遇到了很多麻煩。

這是我的PHP至今:

$sql = "SELECT Name FROM Employees WHERE Password='$password'"; 
if(!$result = $mysqli->query($sql)) { 
    echo "Sorry, the query was unsuccessful"; 
} 

while($employee = $result->fetch_assoc()) { 
    $jsonResult = json_encode($employee); 

    $employee->close(); 
} 

我已經離開了基本的連接代碼,因爲我有所有的啓動和運行。這裏是我的C#:

private void OnLoginButtonClick() 
{ 
    var mClient = new WebClient(); 
    mClient.DownloadDataAsync(new Uri("https://127.0.0.1/JMapp/Login.php?password=" + _passwordEditText.Text)); 
} 

正如你所看到我真的在一個非常基礎的階段。我安裝了Newtonsoft,所以我準備好處理即將回來的Json,但是我有幾個問題。

我很瞭解SQL注入,以及我的變量(密碼)傳遞給PHP的方式關注我。有沒有更安全的方法來做到這一點?

其次,我現在不確定如何讓與PHP中的MySQL命令匹配的'Employees'返回到C#中。我如何能夠訪問從PHP傳回的對象?

+4

**不要存儲純文本密碼!**請使用***的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html) ***來處理密碼安全。如果您使用的PHP版本低於5.5,則可以使用'password_hash()'[兼容包](https://github.com/ircmaxell/password_compat)。 ***在散列之前,不需要[escape passwords](http://stackoverflow.com/q/36628418/1011527)***或使用其他任何清理機制。這樣做*更改密碼並導致不必要的附加編碼。 –

回答

0

撇開問題中代碼的其他方面,我總結了一些關於消毒和轉義用戶數據的內容。

對於這個密碼的具體情況,請參閱@Jay Blanchard的評論。對於其他輸入,您不會在輸入時進行轉換,但想法是在您收到輸入後立即對其進行消毒。

這是爲了確保您收到您所期望的。在字符串的情況下,修剪()文本,匹配允許字符的正則表達式。如果你允許html標籤,你可以將它與白名單匹配。最長長度。

然後你會驗證它。這是有意義的,並符合業務需求。

在將其存儲在數據庫中時,可以使用預準備語句避免使用sqlinjection。通過這樣做,很明顯什麼是要存儲的文本以及什麼是sql指令。

在使用數據的時候,你會逃避它accoring到其將被使用,例如,如果是HTML內容,你逃避它的HTML內容,如果它是一個HTML屬性,或URL參數,您可以針對每種情況進行相應的轉義。 (WordPress的有一個很好的功能,這樣做)

也不要發送密碼作爲URL參數。使用表單而不是方法POST。網址在瀏覽器的地址部件中可見。而且他們也可以通過電子郵件,臉書等方式粘貼複製品