wordpress 记录MySQL错误时出现ModSecurity问题

izj3ouym  于 2023-01-25  发布在  WordPress
关注(0)|答案(2)|浏览(182)

我目前正在为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-&gt;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注入?那么我应该如何记录我的错误呢?

iyzzxitl

iyzzxitl1#

看来这方面的安全性真的很重要。甚至Stackoverflow都有解决方案。它把我上面发布的错误消息嵌套到特殊元素中:

<code class="hljs language-vhdl">
  <span class="hljs-literal">Failure</span>
  <span class="hljs-keyword">in</span>
  wpdb-&amp;gt;query!&lt;br&gt;&lt;code&gt;You have an
  <span class="hljs-literal">error</span>
  <span class="hljs-keyword">in</span>
  your SQL syntax; check the manual that corresponds
  <span class="hljs-keyword">to</span> your MySQL server version
  <span class="hljs-keyword">for</span> the right syntax
  <span class="hljs-keyword">to</span>
  <span class="hljs-keyword">use</span>
  near
  <span class="hljs-symbol">'DDELETE</span>
  FROM wpdev_postmeta WHERE meta_key =
  <span class="hljs-string">"custom_meta"</span>
  ' at
  <span class="hljs-literal">line</span>
  <span class="hljs-number">1</span>&lt;/code&gt;
</code>

我的解决方案是用HTML实体&nbsp;替换所有空格。然后它也通过了ModSecurity。

r3i60tvu

r3i60tvu2#

那么这是否意味着ModSecurity认为这是一个SQL注入?那么我应该如何记录我的错误呢?
我不这么认为。
查看日志消息:

ModSecurity: Access denied with code 404 (phase 4). Pattern match "You have an error in your SQL syntax; check the manual " at RESPONSE_BODY.

关键是阶段,即4和目标:* * 响应_正文**。
您是对的,这是因为ModSecurity(甚至更多的是使用的规则集),但它没有假设这是一个SQL注入。
那么我应该如何记录我的错误呢?
您应该创建一个排除项(取决于URI/IP地址/任何内容),并部分删除规则361022或规则中的目标RESPONSE_BODY

相关问题