我目前有一个网页,它从SQL数据库中提取数据并使用php显示它来处理连接和查询。
我目前在我的PHP文件中使用此代码段来连接和提取数据:
$conn = odbc_connect(
"DRIVER={SQL Server Native Client 10.0};Server=xxx.xxx.xxx.xxx;Database=databasename", "username", "password");
if (!($conn)) {
echo "<p>Connection to DB via ODBC failed: ";
echo odbc_errormsg ($conn );
echo "</p>\n";
}
有没有人看到这个漏洞,我应该使用哪种做法?
答案 0 :(得分:1)
我会将这样的代码放入PHP类文件中,并在DAO模式(数据访问对象)之后对其进行建模。然后,对需要读取/写入数据库的脚本使用require
或require_once
指令。
这减少了重复并坚持DRY(不要重复自己),当其他脚本/代码需要读取/写入同一个DB时,您已经有了一个方法来实现。< / p>
我建议不要将错误信息打印到屏幕上。无论如何,请将其记录到文件中(或检查错误日志以查看发生的情况)。
答案 1 :(得分:0)
正如Adam T建议的那样,这类代码肯定应该在一个可以在你的应用程序中重复使用的单独文件中捕获(可能已经是这种情况 - 从给出的细节中不清楚)。
如果您查看任何CMS系统,例如。 WordPress,Joomla或Drupal,您将看到它们都以纯文本形式将数据库凭证存储在config.php文件或类似文件中,并在请求处理周期的早期读取。
关于漏洞,最终,您必须将登录凭据放在PHP代码可以访问它的某个地方,因此要么必须以明文形式存储在PHP或文本文件中,要么包含或读入,或者以某种方式混淆,但通常这是浪费时间和精力。
最好的办法是确保包含登录凭据的文件通过文件系统权限得到适当保护,以防止未经授权的窥探访问。