2017-05-22 19 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。网址在浏览器的地址部件中可见。而且他们也可以通过电子邮件,脸书等方式粘贴复制品