有关MySQL和PHP,表格的一般安全性问题

时间:2018-10-21 22:07:15

标签: php mysql forms security

我正在尝试开发一个Web应用程序,用户可以在其中输入数据,然后以格式化的方式在我站点内的各种子应用程序中检索数据。基本上,这是一个形式繁重的应用程序。我使用PHP,HTML和MySQL进行开发。我希望有一天能使它商业化。我足以使站点正常运行,但是随着我对其进行更多的开发,我想更多地考虑安全性。我还有一个管理仪表板,可以控制和管理主应用程序。

因此,有两个应用程序,两个MYSQL数据库以及数据库和表之间的信息共享。编程语言根本不高级(可能只是菜鸟级别)

  1. 对于Forms,在将输入的数据发送到mysql进行存储之前,我使用以下代码;

    $lname = stripslashes($_REQUEST['lname']);
    $lname = mysqli_real_escape_string($concfc, $lname);
    

    在我开发更多表格之前,我是否应该实施一些其他增加的形式?我一般可以采用哪些其他方法来提高安全性?

  2. 我使用$_GET变量,通过URL like my question here传递变量。关于清除它有很多讨论。除了我在上面的表格中所做的以外,我真的不知道这意味着什么。

  3. 最终,应用程序将托管(很可能会使用第三方提供商托管)用户上载的应用程序中要使用的文档(通过电子邮件发送,保持文档顺序等)。

  4. 还有什么我可以做的事情来使我的应用程序更安全?我希望我的问题不要像我试图学习“最佳实践”那样模糊,至少对于我的编程知识而言。我知道网络上有很多信息,但是我真的不确定哪一个更合适,必要或适用。

谢谢

1 个答案:

答案 0 :(得分:-2)

用我十年以上的PHP和安全编程知识为您解答问题:

1)过滤器是基本过滤器,但由于使用mysqli_real_escape_string(),因此可以有效避免SQL注入。您需要记住,您永远不能信任收到的数据。在我的系统上,我总是清理需要在代码顶部处理的所有数据,例如:

<?php
$data = array ();
$data["name"] = trim ( ucfirst ( strtolower ( $_REQUEST["name"])));
if ( empty ( $data["name"]))
{
  die ( "User name is required.");
}
$data["age"] = (int) $_REQUEST["age"];
if ( $data["age"] == 0)
{
  die ( "User age is required.");
}
// and so on. If I receive an email, I validate it too. BTW, I always validate if a received value are completely valid, into a valid range, valid structure, etc.

清理后,使用我从$data[]使用的代码,这些代码是收到的经过过滤的有效值。

在SQL查询中,我使用mysqli_real_escape_string()。您也可以使用准备好的语句。

2)使用GET方法时,可以清楚地在URI中看到变量。您也有大小限制。

此限制随所使用的服务器和客户端(以及服务器或客户端正在使用的代理服务器,如果适用)不同。

I.E。例如,限制为2048字节(2KB),Opera限制为4096字节(4KB),Firefox限制为8192字节(8KB),而大多数现代Web服务器的限制为8192字节(8KB)。

在可能的情况下,最好使用POST

在PHP中,您可以通过$_REQUEST$_GET混合使用的$_POST访问数据。

3)请记住将其存储在磁盘上。创建数据库是为了存储数据,而不是文档。这是一个常见的错误。

4)继续阅读并寻找最佳实践。使用安全哈希(我建议hash_pbkdf2())存储您的用户密码,使用SSL,记录系统上进行的所有操作(如果需要)以进行审核,使所有系统备份保持最新状态,控制哪些人可以访问您的服务器,使用防火墙,检查登录尝试等。

希望这对您有帮助,我知道这远非要采取的措施之选,但这是一个好的开始。