【问题标题】:SELECT from PHP (MySQL) Back Into Android (C#)SELECT 从 PHP (MySQL) 返回到 Android (C#)
【发布时间】:2017-05-22 15:25:30
【问题描述】:

我有一个 Android 应用程序,我正在尝试使用 PHP/MySQL。

我在通过 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 命令匹配的“员工”返回 C#。如何访问从 PHP 传回的对象?

【问题讨论】:

  • 永远不要存储纯文本密码!请使用 PHP 的built-in functions 来处理密码安全问题。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack在散列之前不需要escape passwords 或对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。

标签: c# php android mysql


【解决方案1】:

抛开问题中代码的其他方面不谈,我建议阅读一些有关清理和转义用户数据的内容。

对于这种特定的密码情况,请参阅@Jay Blanchard cmets。对于您不会在输入后进行转换的其他输入,我们的想法是在收到它后立即对其进行清理。

这是为了确保您收到预期的结果。对于字符串, trim() 文本,将其与允许字符的正则表达式匹配。如果您允许或不允许 html 标签,您可以将其与它们的白名单进行匹配。最大长度。

然后你会验证它。这是有意义的,满足业务需求。

在将其存储在数据库中时,您可以通过使用准备好的语句来避免 sqlinjection。这样做就清楚了什么是要存储的文本,什么是sql指令。

在使用数据的时候,你会根据要使用的地方对其进行转义,例如,如果是html内容,则将其转义为html内容,如果是html属性,或者是URL参数,您对每种情况进行相应的转义。 (Wordpress 有一套很好的功能可以做到这一点)

也不要将密码作为 URL 参数发送。使用 POST 方法代替表单。网址可以在浏览器的地址小部件中看到。他们还会将副本粘贴到电子邮件、Facebook 等中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多