Apache/PHP/HTML - Textarea,提交包含换行符(输入键)的表单会产生 403?

Posted

技术标签:

【中文标题】Apache/PHP/HTML - Textarea,提交包含换行符(输入键)的表单会产生 403?【英文标题】:Apache/PHP/HTML - Textarea, submitting form that includes a line break (enter key) produces 403? 【发布时间】:2014-04-17 15:56:29 【问题描述】:

我有一个奇怪的问题,它可能与我的 Apache 配置有关,但我不确定,所以我在这里问。

我有一个联系表格,在这个联系表格中有一个文本区域。

如果我填写联系表并在测试区域中输入一行文本,例如

Test

表格填写完毕,我会收到电子邮件通知。但是,如果在 textarea 内部,我会执行以下操作:

Test

Test

我得到以下信息:

403 - Forbidden

Forbidden
You don't have permission to access /contact_us.php on this server.

为了调试,我在表单控制器中添加了一个标记,以便在表单提交后立即停止脚本,所以我有以下内容:

# IF SEND QUERY BUTTON IS CLICKED
if (isset($_POST['sendQuery']) && $_POST['sendQuery'] == 'Send Query')

    echo 'HALT HERE';
    exit;
    ...

当我提交表单时:

Test

我收到HALT HERE,但是当我提交时:

Test

Test

标记没有被触发,我得到了 403。这就是为什么我认为这可能与 Apache 有关,而不仅仅是我在 PHP / html 中所做的事情。

有没有人知道什么可能导致这样的事情发生?提前致谢!

编辑:

服务器是带有 mod_security(+ oWasp 定义)和 mod_evasive 的 Apache 2。

以下在php.ini中

disable_functions = php_uname, getmyuid, getmypid, passthru, fpassthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, escapeshellarg, escapeshellcmd, shell_exec, curl_exec, curl_multi_exec, exec, dl, set_time_limit, system, highlight_file, source, show_source, fsocketopen, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, parse_ini_file. ini_alter, popen, phpinfo

在我设置的虚拟主机配置中:

<LimitExcept GET POST>
     deny from all
</LimitExcept>

表单 HTML 是:

<form class="remove-bottom" action="" method="post">
...    
<textarea 
    name="userQuery" id="userQuery" 
    cols="40" rows="10" 
    value="" 
    maxlength="2000" 
    class="quarter-bottom" 
></textarea>
...
</form>

我在 apache 错误日志中得到了这个:

[Thu Mar 13 08:06:54 2014] [error] [client my.ip.my.ip] ModSecurity: Rule 7fd0751d6280 [id "950901"][file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"][line "77"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.test.com"] [uri "/index.php"] [unique_id "UyFK-mAcYdcAACwKBI8AAAAE"]
[Thu Mar 13 08:06:59 2014] [error] [client my.ip.my.ip] ModSecurity: Rule 7fd0751d6280 [id "950901"][file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"][line "77"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.test.com"] [uri "/contact_us.php"] [unique_id "UyFLA2AcYdcAACwKBJAAAAAE"]
[Thu Mar 13 08:06:59 2014] [error] [client my.ip.my.ip] ModSecurity: Rule 7fd075bb3940 [id "-"][file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_55_application_defects.conf"][line "27"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.test.com"] [uri "/contact_us.php"] [unique_id "UyFLA2AcYdcAACwKBJAAAAAE"]
[Thu Mar 13 08:06:59 2014] [error] [client my.ip.my.ip] ModSecurity: Warning. Match of "rx (?i:(<meta.*?(content|value)=\\"text/html;\\\\s?charset=|<\\\\?xml.*?encoding=))" against "RESPONSE_BODY" required. [file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_55_application_defects.conf"] [line "23"] [id "981220"] [msg "[Watcher Check] No charset was specified in the HTTP Content-Type header nor the HTML content's meta tag."] [data "Content-Type Response Header: text/html"] [tag "WASCTC/WASC-15"] [tag "APP_DEFECT/MISCONFIGURATION"] [tag "http://code.google.com/p/browsersec/wiki/Part2#Content_handling_mechanisms"] [hostname "www.test.com"] [uri "/contact_us.php"] [unique_id "UyFLA2AcYdcAACwKBJAAAAAE"]
[Thu Mar 13 08:06:59 2014] [error] [client my.ip.my.ip] ModSecurity: Rule 7fd074f08b10 [id "-"][file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_55_application_defects.conf"][line "41"] - Execution error - PCRE limits exceeded (-8): (null). [hostname "www.test.com"] [uri "/contact_us.php"] [unique_id "UyFLA2AcYdcAACwKBJAAAAAE"]
[Thu Mar 13 08:06:59 2014] [error] [client my.ip.my.ip] ModSecurity: Warning. Match of "rx (<meta.*?(content|value)=\\"text/html;\\\\s?charset=utf-8|<\\\\?xml.*?encoding=\\"utf-8\\")" against "RESPONSE_BODY" required. [file "/etc/modsecurity/owasp-crs/activated_rules/modsecurity_crs_55_application_defects.conf"] [line "36"] [id "981222"] [msg "[Watcher Check]  The charset specified was not utf-8 in the HTTP Content-Type header nor the HTML content's meta tag."] [data "Content-Type Response Header: text/html"] [tag "WASCTC/WASC-15"] [tag "MISCONFIGURATION"] [tag "http://websecuritytool.codeplex.com/wikipage?title=Checks#charset-not-utf8"] [hostname "www.test.com"] [uri "/contact_us.php"] [unique_id "UyFLA2AcYdcAACwKBJAAAAAE"]

other_vhosts_access.log 显示:

test.com:80 my.ip.my.ip - - [13/Mar/2014:08:38:47 +0200] "POST /contact_us.php HTTP/1.1" 403 463 "http://www.test.com/contact_us.php" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"

【问题讨论】:

请张贴表单标记和apache配置的相关部分。 @arkascha 我已按要求添加了一些额外信息,我不太确定这里还有什么适用的,谢谢! 请将标记 sn-p 替换为您从浏览器中获取的最后一个标记。这是不完整的,是 html 和 php 的混合。请同时发布封闭的&lt;form&gt; 标签。 @arkascha 嗨,感谢所有的努力。已更新,包括表单并添加了错误日志中的信息。 嗯,那些 modsecurity 警告很有趣,但仍然只是警告。您的 http 服务器错误日志文件中应该有错误。你能检查一下吗?虽然我不得不说这些正则表达式失败对我来说看起来很可怕。您自己指定的任何特殊规则?不过,可能值得在谷歌上搜索一下这种效果。 【参考方案1】:

我们遇到了同样的问题。我们通过从 ModSecurity 配置中删除该规则来解决它。

【讨论】:

我们在摸不着头脑后做了同样的事情。

以上是关于Apache/PHP/HTML - Textarea,提交包含换行符(输入键)的表单会产生 403?的主要内容,如果未能解决你的问题,请参考以下文章

Apache/PHP/HTML - Textarea,提交包含换行符(输入键)的表单会产生 403?

kindeditor使用方法,kindeditor怎么设置长宽度

kindeditor使用方法,kindeditor怎么设置长宽度

input限制输入

理解content

理解content