我应该在PHP中注意哪些安全问题

2021/01/18 04:21 · php ·  · 0评论

我刚开始学习PHP,很长时间以来一直在ASP.Net中开发Web应用程序。我想知道是否应该寻找任何特定于PHP的安全性错误。

因此,我的问题是每个PHP开发人员应该知道的最重要的安全提示是什么?

请在每个答案中给每个提示一个提示,以便人们可以有效地上下投票。

(无特定顺序)

  1. 始终检查寄存器全局变量是否为OFF
  2. 始终检查魔术引号是否已关闭
  3. 确保您了解SQL注入攻击
  4. 关闭生产中的错误报告

编辑:对于那里的“新手”,这是一个基本的原因(并且因为我有时间来解释这一点):

  1. 注册全局变量是一种畸变。这是有史以来的终极安全漏洞。例如,如果register_globals处于打开状态,则URL http://www.yourdomain.com/foo.php?isAdmin=1会将$ isAdmin声明为全局变量,而无需代码。我不知道为什么这个“功能”成为了PHP的代名词,但背后的人们应该在额头上刻上以下纹身:“我发明了PHP Register Globals”,以便我们在看到它们时可以像害虫一样逃跑!

  2. 魔术引号是另一个愚蠢的想法,使之成为PHP。基本上,当启用PHP时,PHP会自动转义引号(“变为\”和“变为\”)以帮助进行SQL注入攻击。这个概念不错(有助于避免注入攻击),但是转义所有GET,POST和COOKIE值会使您的代码变得如此复杂(例如,每次显示和数据时都必须转义)。另外,如果有一天您在不对代码进行任何更改的情况下将此设置关闭了,则所有代码和/或数据都将损坏,并且(甚至更多)容易受到注入攻击(即使打开也很容易受到攻击)。

  3. 您的数据库数据是您网站上最有价值的东西。您不希望人们对此感到困惑,因此请保护自己,并仔细阅读有关内容代码。

  4. 同样,这可能导致安全问题。该错误消息可以为黑客提供有关代码工作方式的提示。同样,这些消息对您的访客没有任何意义,那么为什么要显示它们呢?

避免使用register_globals

警告:自PHP 5.3.0起已弃用此功能,自PHP 5.4.0起已取消此功能。

这里是良好的PHP安全编程实践的链接。

http://phpsec.org/

大多数安全问题都围绕用户输入(自然而然),并确保它们不会使您烦恼。始终确保您验证输入。

http://htmlfixit.com/cgi-tutes/tutorial_PHP_Security_Issues.php

  1. 始终清理和验证从页面传递的数据
  2. 与#1结合使用时,请始终正确地转义输出
  3. 始终display_errors在生产中关闭
  4. 如果使用数据库后端,请使用支持/模拟准备好的语句的驱动程序,并且在使用时不会产生偏见:-)

不要使用“注册全局变量”并过滤xss和注入的用户输入

语言与程序员。您可以编写最严重的漏洞,而不会收到警告或错误消息。漏洞就像在代码中添加或删除2个字符一样简单。影响PHP应用程序的漏洞有数百种。大多数人认为XSS和Sql Injection是因为它们最受欢迎。

阅读OWASP前10名

如果您使用的是mysql数据库,请确保在向数据库发送数据时调用mysql_real_escape_string

有大量的安全预防措施。我可以推荐一本书Chris Shiflett:《 PHP和Web应用程序安全性》。

http://phpsecurity.org/

查看Suhosin强化补丁,并检查其所解决安全漏洞

PHPSec指南》提供了很好的概述。

与PHP有关的大多数安全问题都来自使用未解析的“外部”(GET / POST / COOKIE)变量。人们将这类数据直接放入文件路径或sql查询中,从而导致文件泄漏或sql注入。

OWASP提供了很多有关安全问题的见解,这些问题是当今应用程序中最大的问题。很高兴看到他们有一个PHP专用页面

http://www.owasp.org/index.php/PHP_Top_5

  1. 始终关闭SQL连接。
  2. 始终发布SQL结果。
  3. 始终清理所有放入数据库的变量。
  4. 从sql删除或删除时,请使用限制1,以防万一。
  5. 开发时,请确保您锁定所有东西以阻止不良行为。如果打开了页面,并且您知道现在不会加载该页面,因为它可能会破坏某些内容,则并不意味着其他人也会这样做。
  6. 切勿使用“管理员”或“ root”作为服务器登录名。

只要有可能,就使用准备好的语句(教程。在处理用户输入时几乎是必须的(我说“几乎”,因为在一些用例中它们不起作用),即使不处理输入,它们也会使您保持更不用说它们可以带来更好的性能,而且,一旦您陷入困境,与零散的消毒相比,它们更容易实现。

入门教程通常根本不涉及检查用户数据。像所有编程环境一样,永远不要信任您从用户那里获得的数据。了解如何使用功能,如is_numeric()isset()mysql_real_escape_string()保护您的系统。

还有一些功能可让您访问远程文件和其他创意内容。在您完全了解它们的工作方式和时间之前,我会避免使用它们(通常出于安全原因将它们禁用)。

使用POST方法将数据从一页传递到另一页。

在获取数据(如)时使用trim trim($_POST)另外,strip_tags在传递到查询之前,将变量用于。

我建议您使用任何框架链接Codeigniter,Laravel,YII,Cake PHP,因为它们使用所有证券来维护框架

对于小型项目,我建议使用Codeigniter;对于大型项目,我建议使用Laravel。

始终对重要数据使用POST而不是GET ...

本文地址:http://php.askforanswer.com/woyinggaizaiphpzhongzhuyinaxieanquanwenti.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!