关于MySQL和PHP的一般安全问题,表单



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

所以有两个应用程序,2个MYSQL数据库和数据库和表之间的信息共享。编程语言一点也不先进(可能勉强算是菜鸟水平(

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

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

    在开发更多表单之前,我是否应该实现其他内容来增加?通常,我可以遵循哪些其他方法来提高安全性?

  2. 我使用$_GET变量,通过URL传递变量,就像我在这里的问题一样。有很多关于消毒的讨论。我真的不知道这意味着什么,除了我为上面的表格所做的工作。

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

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

谢谢

用我 10 多年的 PHP 和安全编程知识回答您的问题:

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

<?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 中清晰可见。您也有大小限制。

限制因使用的服务器和客户端而异(如果适用,服务器或客户端使用的代理也有所不同(。

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

如果可能,应首选使用POST

在PHP,你可以通过$_REQUEST访问数据,$_GET$_POST混合。

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

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

希望这对您有所帮助,我知道这远非要采取的措施的良好汇编,但这是一个良好的开端。

相关内容

  • 没有找到相关文章

最新更新