4

我构建了一个 API,我想对其进行测试。我已经进行了测试,但我想通过已知危险用户输入brute forcing的通用列表确保它在某种程度上是安全的。 它是用 PHP 和 MySql 编写的,你们中的一些人可能不同意蛮力在这里是否是一种好习惯,但这是一项额外的安全措施

4

2 回答 2

3

OWASP 提供了一个很好的备忘单,可以回答您的问题:https ://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

于 2012-09-20T09:03:28.857 回答
1

很明显,当您制作应用程序时,您希望使其安全。这也是我的担忧。为此,我进行了彻底的研究并收集了有助于保护 PHP 网站的信息。

PHP 应用程序安全需要考虑的要点

  1. 使用强密码加密

一种。使用密码加盐进行强加密。

2.永远不要相信用户输入。考虑每个变量,即 $_POST、$_GET、$_COOKIE、$_SESSION、$_SERVER,就好像它们被污染了一样。对这些变量使用适当的过滤措施。

  1. 为了避免 XSS 攻击,在将用户输入数据插入数据库时​​,使用 php 的内置函数 htmlentities、strip_tags 等。[下面的函数(3)将解决这个问题]

  2. 使用自定义清理功能来避免 sql 注入和其他恶意活动。

  3. 在 PHP.INI 中禁用注册全局变量

  4. 在 PHP.INI 中禁用“allow_url_fopen”

  5. 不要将敏感数据存储在 cookie 中,因为 cookie 可能会被盗。

  6. 检查十六进制代码攻击。清理用户输入以过滤十六进制代码。

9. 不允许用户输入超出要求的数据。验证输入以允许最大字符数。还要验证相关数据类型的每个字段。

  1. 开发期后禁用错误报告。它可能会提供对黑客有用的数据库信息。

  2. 在浏览器中隐藏文件扩展名。使用 url 重写技术。

  3. 对于登录系统,在 X 次登录尝试失败后禁用用户。

  4. 记录每次登录的 IP 地址。

  5. 对于所有登录,出于安全原因,请设置系统,以便用户必须在 X 天后更改密码。

  6. 在管理面板中,每个登录都应该有报告(登录失败、登录尝试等)。注意:- 这将有助于跟踪频繁尝试登录系统失败的 IP。我们可以通过 .htaccess 禁止此类 IP 访问系统。

  7. 在 X 分钟的空闲期后自动从系统中注销用户。

  8. 当用户请求更改密码时,拒绝用户保留以前的密码。

  9. 从服务器禁用 exec、eval、shell_exec 等 php 函数。

  10. 服务器目录安全。通过 .htaccess 禁用目录列表。将 index.html 文件放在每个目录中,如图像、css、文档等。

  11. 在 PHP.INI 上进行以下设置(在生产服务器中)

一种。禁用allow_url_encode b。Display_errors = 关闭 c。Log_errors = on d。Log_errors_max_len = 0 e。Ignore_repeated_errors = 关闭 f。Ignored_repeated_source = 关闭 g。Track_errors = 关闭

  1. 发布表单时使用一次性令牌。如果令牌存在并且匹配表单帖子是有效的,否则无效。
PHP Code : $token = md5 (uniqid (rand (), true)); $_SESSION[“token”] =
> $token;

> HTML Code : <form> <input type=”hidden” name=”token” value=”&lt;?php echo
> $token;?>”&gt; </form>
  1. 限制输入字段长度以避免 BUFFER OVERFLOW ATTACK 例如:- PHP 是一门高级语言,它的内存分配不受限制,但到最后,当页面执行时,处理事情的是 APACHE。Apache 是用 C 语言编写的,它对内存分配有严格的规定。输入字段中的大数据可能会对 Apache 的行为产生影响。

  2. 每种数据类型的数据库字段长度不应超过实际要求。

  3. 黑客政策——“如果你不能打败他们,就把他们关掉” 例如:- 必须检查访问应用程序的用户的 IP。如果黑客无法进入应用程序破坏,他们肯定会尽力对应用程序产生负面影响。他们会尝试在无限循环中执行应用程序。这会降低应用程序的速度,耗尽服务器带宽,有时甚至会导致服务器崩溃。因此,跟踪这些活动将避免大量损失。

  4. 出于性能原因,从 PHP.INI 禁用所有不需要和未使用的 php 扩展和模块。例如:- 如果我们使用 mysql 作为数据库,那么启用 postgre、sqllite、mssql 和 oracle 数据库扩展是没有意义的。

  5. 避免使用已弃用的 PHP 函数。注意:- PHP 团队不再支持已弃用的函数。因此,明智的做法是避免使用已弃用的函数。

  6. 开发人员犯的一些严重错误。例子:。在版本查询字符串中传递记录 ID 时,不检查以确保它们是 a) 有效(该记录存在),并且 b) 记录属于请求它的用户,或者用户有权查看该记录。

  7. 一个好的网络主机。注意:大多数情况下,即使应用程序被安全编码,问题和问题也可能来自糟糕的网络主机。如果应用程序托管在远程服务器上,那么获得具有安全声誉的良好网络主机至关重要。对共享主机说不。

例如:在很多情况下,人们报告“我的网站被黑客入侵”,而实际上他们的共享主机允许同一服务器上的另一个用户提升他们的权限。

  1. 禁用外国IP。如果一个应用程序只需要从某个地方运行,那么禁用这个地方以外的IP。

  2. 使用存储过程 使用存储过程将大大提高安全性。否则,如果我们使用原始查询,请使用参数化查询。

  3. 测试应用程序:通过输入随机值来测试应用程序。这应该由不在开发团队中的人完成。

  4. 要记住的点。无论我们使用 .NET、Java 还是 PHP,安全问题都不是我们选择的语言的问题。安全问题是由于应用程序的编程方式造成的问题。即使是糟糕的编程,.NET 和 Java 应用程序也同样容易受到攻击。

  5. 加密 PHP 代码 使用 IONCUBE (http://www.ioncube.com/) 等加密工具对生产服务器中的 php 代码进行加密,以使 php 代码免受未经授权的更改。在撰写本文时,IONCUBE 的价格为 199 美元。

  6. 使用 Havij、Acunetix、Netsparker 等可用工具来检查应用程序中的漏洞。聘请黑客网络应用程序专家将大有裨益。

于 2012-09-20T09:22:46.710 回答