关于mysql和php的一般安全问题,表单

azpvetkf  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(337)

我正在尝试开发一个web应用程序,用户在其中输入数据,并在我的站点中的各个子应用程序中以格式化的方式检索数据。基本上,这是一个形式繁重的应用程序。我使用php、html和mysql来开发它。我希望有一天我能使它商业化。我足够好,使网站的功能,但随着我开发它更多,我想考虑更多的安全性。我也有一个管理 Jmeter 板,我控制和管理的主要应用程序。
因此有两个应用程序,2个mysql数据库和数据库与表之间的信息共享。编程语言一点也不高级(可能只是新手水平)
对于表单,在将输入的数据发送到mysql存储之前,我使用以下命令:;

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

在我开发更多表单之前,我是否应该实现一些其他的东西来增加?一般来说,我还可以采用哪些方法来提高安全性?
我用 $_GET 变量,通过url传递变量,就像我这里的问题。。有很多关于消毒的讨论。我真的不知道这意味着什么,除了我做的形式以上。
最终,应用程序将在应用程序中托管(很可能使用第三方提供商托管)用户上传的要使用的文档(通过电子邮件发送,保持文档顺序等)。
还有什么我可以开始做,使我的应用程序更安全?我希望我的问题不要像我试图学习“最佳实践”那样含糊不清,至少对我的编程知识水平来说是这样。我知道网上有很多信息,但我真的不知道哪一个更合适,必要或适用。
谢谢

dly7yett

dly7yett1#

用我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处清晰可见。你也有大小的限制。
限制因使用的服务器和客户端而异(如果适用,还包括服务器或客户端正在使用的代理)。
i、 例如,限制为2048字节(2kb),opera限制为4096字节(4kb),firefox限制为8192字节(8kb),大多数现代web服务器限制为8192字节(8kb)。
使用 POST 如有可能,应优先考虑。
在php中,您可以通过 $_REQUEST ,那个混音 $_GET 以及 $_POST .
3) 记得把它存储在磁盘上。创建数据库是为了存储数据,而不是文档。这是一个常见的错误。
4) 继续阅读并寻找最佳实践。使用安全哈希存储用户密码(我建议使用哈希\u pbkdf2())、使用ssl、记录在系统上执行的每个操作以进行必要的审核、使所有系统备份保持最新、控制谁可以访问您的服务器、使用防火墙、检查登录尝试等。
希望这对你有所帮助,我知道这远不是一个好的措施汇编,但这是一个良好的开端。

相关问题