我目前正在为WordPress创建一个插件,它将记录自定义代码中可能发生的管理区错误。这个日志不是用于PHP错误,这些错误已经存储在debug.log中。
它更多的是帮助找到配置错误,例如,如果我有一个活套的职位,我希望职位的形象是设置.像:
$post_img = get_the_post_thumbnail_url(123, 'full');
if ($post_img == false)
{
my_error_log ('No featured image set for post 123');
}
我以管理员WP_List样式显示这些错误,这样即使是编辑也可以处理和解决这样的配置错误。一切都很好,直到我尝试捕捉$wpdb-〉last_error消息!
$query = $wpdb->query ('DDELETE FROM ' . $wpdb->postmeta . ' WHERE meta_key = "custom_meta";');
if ($query === false)
{
my_error_log ('Failure in wpdb->query!<br><code>' . $wpdb->last_error .'</code>');
}
- DELETE命令故意不正确,以生成错误消息!*
使用以下命令将其正确写入数据库
Failure in wpdb->query!<br><code>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DDELETE FROM wpdev_postmeta WHERE meta_key = "custom_meta"' at line 1</code>
但是如果我想在WP_LIST中显示错误,同时使用函数prepare_items和$wpdb-〉get_results('SELECT * FROM wp_my_error_log....我只会得到一个404错误,并且什么也不显示!
在搜索服务器错误日志文件时(右边的;- ))我找到了下面这行:
> [:error] [pid 803349:tid 139870349313792] [client 123.XXX.XXX.XXX:0]
> ModSecurity: Access denied with code 404 (phase 4). Pattern match "You
> have an error in your SQL syntax; check the manual " at RESPONSE_BODY.
> [file "/etc/modsecurity/conf.d/11_asl_data_loss.conf"] [line "96"] [id "361022"]
> [rev "2"] [msg "Atomicorp.com WAF Rules: Potential SQL Information Leakage"] [severity "ALERT"] [tag "no_ar"]
那么这是否意味着ModSecurity认为这是一个SQL注入?那么我应该如何记录我的错误呢?
2条答案
按热度按时间iyzzxitl1#
看来这方面的安全性真的很重要。甚至Stackoverflow都有解决方案。它把我上面发布的错误消息嵌套到特殊元素中:
我的解决方案是用HTML实体
替换所有空格。然后它也通过了ModSecurity。r3i60tvu2#
那么这是否意味着ModSecurity认为这是一个SQL注入?那么我应该如何记录我的错误呢?
我不这么认为。
查看日志消息:
关键是阶段,即4和目标:* * 响应_正文**。
您是对的,这是因为ModSecurity(甚至更多的是使用的规则集),但它没有假设这是一个SQL注入。
那么我应该如何记录我的错误呢?
您应该创建一个排除项(取决于URI/IP地址/任何内容),并部分删除规则
361022
或规则中的目标RESPONSE_BODY
。