我正在尝试开发一个Web应用程序,用户可以在其中输入数据,然后以格式化的方式在我站点内的各种子应用程序中检索数据。基本上,这是一个形式繁重的应用程序。我使用PHP,HTML和MySQL进行开发。我希望有一天能使它商业化。我足以使站点正常运行,但是随着我对其进行更多的开发,我想更多地考虑安全性。我还有一个管理仪表板,可以控制和管理主应用程序。
因此,有两个应用程序,两个MYSQL数据库以及数据库和表之间的信息共享。编程语言根本不高级(可能只是菜鸟级别)
对于Forms,在将输入的数据发送到mysql进行存储之前,我使用以下代码;
$lname = stripslashes($_REQUEST['lname']);
$lname = mysqli_real_escape_string($concfc, $lname);
在我开发更多表格之前,我是否应该实施一些其他增加的形式?我一般可以采用哪些其他方法来提高安全性?
我使用$_GET
变量,通过URL like my question here传递变量。关于清除它有很多讨论。除了我在上面的表格中所做的以外,我真的不知道这意味着什么。
最终,应用程序将托管(很可能会使用第三方提供商托管)用户上载的应用程序中要使用的文档(通过电子邮件发送,保持文档顺序等)。
还有什么我可以做的事情来使我的应用程序更安全?我希望我的问题不要像我试图学习“最佳实践”那样模糊,至少对于我的编程知识而言。我知道网络上有很多信息,但是我真的不确定哪一个更合适,必要或适用。
谢谢
答案 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,记录系统上进行的所有操作(如果需要)以进行审核,使所有系统备份保持最新状态,控制哪些人可以访问您的服务器,使用防火墙,检查登录尝试等。
希望这对您有帮助,我知道这远非要采取的措施之选,但这是一个好的开始。