httpd.config 或web 根目录外的文件不符合我对smtp 邮件配置的应用要求,请问有什么建议吗?

The httpd.config or file outside the web root not meet my application requirement for smtp mail configuration any suggestion please?

我有一个 table 存储 google smtp 邮件信息使用 php 和 mysql 这个 table 的外观如下

  id|email               |port |smtpsecure |smtpauth |smtpdebug |host           |password    |group_id
  1 |groupone@gmail.com  |465  |ssl        |true     |0         |smtp.gmail.com |strongpass1 |1
  2 |grouptwo@gmail.com  |465  |ssl        |true     |0         |smtp.gmail.com |strongpass2 |2
  3 |groupthree@gmail.com|465  |ssl        |true     |0         |smtp.gmail.com |strongpass3 |3
  4 |groupfour@gmail.com |465  |ssl        |true     |0         |smtp.gmail.com |strongpass4 |4

大家可以看到group_id是用来区分哪些邮件来自哪个组的,但是密码是明文格式,在攻击数据库的时候是不安全的。

避免这种情况最有用的方法是将它们保存在网络根目录之外的另一个文件中或配置 httpd.config 文件,但根据我的机制,它不会按预期工作,因为应用程序访问基于会话的smtp邮件配置以及如果我们用不同的邮件注册多个组怎么办我该如何解决,请anya建议

将您的密码放在网络根目录之外的文件中,然后从您的脚本中加载它。因此,如果您在 /var/www/mysite/webroot/index.php 处有一个脚本,请将您的凭据放入 /var/www/mysite/credentials.php。这样就无法通过网络直接访问该文件,但您的脚本可以通过以下方式加载它:

$credentials = require '../credentials.php`;

您可以为该文件使用多种格式,但 PHP 可以正常工作,因此您可以这样做:

<?php
return [
    1 => 'strongpass1',
    2 => 'strongpass2',
    3 => 'strongpass3',
    4 => 'strongpass4',
];

这只是模拟数据库中的内容,以便您可以在 $credentials 数组中查找密码。

这是否足够安全是另一回事,但至少这意味着您在数据库中没有密码,并且该文件位于网络根目录之外。您可以尝试对文件或密码进行加密,但是在保存密钥时您会 运行 遇到同样的问题。