Обычно я просто приставал к своему провайдеру, чтобы отключить правило. И хотя он, безусловно, заслуживает того, чтобы приставать, я делал это уже слишком часто из-за низкой цены на услуги.
(Как всегда, речь идет о правиле mod_security, которое просто занесено в черный список для какой-то неясной ошибки в Wordpress или Drupal 5 лет назад. Хотя я не использую это, я все равно плачу за ошибки в чужом коде ...)
Тем не мение. Обычно в таких случаях mod_security легко обойти. Я пытался переименовать поля формы, чтобы обойти это. Но на этот раз, похоже, это не помогает. Это оскорбительное правило (которое я не понимаю):
# Rule 340147: Generic XSS filter
SecRule REQUEST_URI "!(/mt\.cgi|^/node/[0-9]+/webform/components/|/node/[0-9]+/edit|/wizard/edit/html|^/\?q=node/[0-9]+/edit/|/node/add/main|sitebuilder/createproject|/admin/\?page=spageedit)" \
"t:none,t:urlDecodeUni,t:replaceComments,t:replaceNulls,t:htmlEntityDecode,t:lowercase,t:compressWhitespace,capture,id:340147,rev:81,severity:2,msg:'Atomicorp.com - FREE UNSUPPORTED DELAYED FEED - WAF Rules: Generic XSS filter',chain,logdata:'%{TX.0}'"
SecRule REQUEST_URI|ARGS|ARGS_NAMES|!ARGS:arg2|!ARGS:resumoDetalhe|!ARGS:Right_photo_1|!ARGS:/^K2ExtraField/|!ARGS:/submitcode/|!ARGS:beschrijving|!ARGS:custombannercode|!ARGS:bannercode|!ARGS:privatecapacity|!ARGS:diz|!ARGS:FormLayout|!ARGS:/^fck/|!ARGS:parent_name|!ARGS:/^code_tscript/|!ARGS:_qf_Group_next|!ARGS:project_company|!ARGS:categories_title|!ARGS:antwoord|!ARGS:project_company|!ARGS:signature|!ARGS:paepdc|!ARGS:tpl_source|!ARGS:teaser_js|!ARGS:/^autoDS/|!ARGS:FrmSide|!ARGS:mainKeywords|!ARGS:/VB_announce/|!ARGS:guardar|!ARGS:/serendipity/|!ARGS:omschrijving|!ARGS:resolution|!ARGS:newyddionc|!ARGS:bericht|!ARGS:property_copy|!ARGS:/^outpay/|!ARGS:bedrijfsprofiel|!ARGS:s_query|!ARGS:finish_survey|!ARGS:photolater|!ARGS:ticket_response|!ARGS:/element/|!ARGS:option[vbpclosedreason]|!ARGS:/introduction/|!ARGS:/contenido/|!ARGS:/sql/|!ARGS:query|!ARGS:c_features|!ARGS:/tekst/|!ARGS:embeddump|!ARGS:other_clubs|!ARGS:/^elm/|!ARGS:/^saes/|!ARGS:dlv_instructions|!ARGS:/^cymr/|!ARGS:_qf_Register_upload|!ARGS:/^elm/|!ARGS:verbiage|!ARGS:news|!ARGS:/^wz/|!ARGS:tiny_vals|!ARGS:sSave|!ARGS:/article/|!ARGS:/about/|!ARGS:/Summarize/|!ARGS:/^product_options/|!ARGS:/SiteStructure/|!ARGS:/anmerkung/|!ARGS:/summary/|!ARGS:/edit/|!ARGS:reply|!ARGS:/story/|!ARGS:resource_box|!ARGS:navig|!ARGS:preview__hidden|!ARGS:/page/|!ARGS:order|!ARGS:/post/|!ARGS:youtube|!ARGS:reply|!ARGS:business|!ARGS:/homePage/|!ARGS:pagimenu_inhoud|!ARGS:/note/|!ARGS:Post|!ARGS:/^field_id/|!ARGS:area|!ARGS:/detail/|!ARGS:/comment/|!ARGS:LongDesc|!ARGS:/desc/|!ARGS:ta|!ARGS:/data/|!ARGS:Returnid|!ARGS:busymess|!ARGS_NAMES:/^V\*/|!ARGS_NAMES:/^S\*/|!ARGS:/^quickrise_advertise/|!ARGS:rt_xformat|!ARGS:/wysiwyg/|!ARGS:contingut|!ARGS:/^werg/|!ARGS:/body/|!ARGS:/css/|!ARGS:/^section/|!ARGS:/msg/|!ARGS:t_cont|!ARGS:/^doc/|!ARGS:/xml/|!ARGS:tekst|!ARGS:formsubmit|!ARGS:invoice_snapshot|!ARGS:submit|!ARGS:/message/|!ARGS:/html/|!ARGS:/content/|!ARGS:/footer/|!ARGS:/header/|!ARGS:/link/|!ARGS:/text/|!ARGS:/txt/|!ARGS:/refer/|!ARGS:/referrer/|!ARGS:/template/|!ARGS:/ajax/ "(< ?(?:(?:java|vb)?script|about|applet|activex|chrome) ?>|> ?< ?(img ?src|a ?href) ?= ?(ht|f)tps?:/|\" ?> ?<|\" ?[a-z]+ ?<.*>|> ?\"? ?(>|<)|< ?/?i?frame|\%env)"
Это запись error.log:
[Tue Mar 29 14:28:52 2011] [error] [client 000.000.000.000] ModSecurity: Access denied with code 403 (phase 2). Match of "rx (^(submit\\\\+>>|>>)$)" against "ARGS:pub_lish2" required. [file "/etc/apache2/modsec2/10_asl_rules.conf"] [line "962"] [id "340147"] [rev "108"] [msg "Atomicorp.com WAF Rules: Generic XSS filter"] [data "848"] [severity "CRITICAL"] [hostname "hahaha.not-telling-you.org"] [uri "/index.php"] [unique_id "TZHQhE6KWTMAAFkDGf0AAAAG"]
Это используемые поля формы:
<form action="index.php" method="POST" enctype="multipart/form-data" accept-encoding="UTF-8">
<input type="hidden" name="pub_lish2" value="1">
<input type="hidden" name="e" value="2">
<textarea name="question">
<tt>...</tt>
<h2>...</h2>
<p>...</p>
<span class="tag">details</span>
</textarea>
<!--div id="captcha" class="captcha">
<input type="hidden" id="__ec_i" name="__ec_i" value="ec.1301402534.e6dcf57012b4410395621d0b6851f0a2" />
<input type="text" name="__ec_s" value="">
</div-->
<input type="submit" value="Post Your Thingy">
</form>
Это не поля капчи, поэтому я их закомментировал. Текстовое поле содержит html, но ничего подозрительного. Я несколько раз переименовал поле отправки, а e = - это просто поле идентификатора.
Может ли кто-нибудь разобраться в сообщении mod_security? Я не понимаю его глупых требований.
Для меня это правило срабатывало, когда кто-то отправлял форму со знаком «меньше», «больше» без символов между ними, поэтому: '> <'
Похоже, ваша форма встроена в те, которые были предварительно введены в форму:
Обратите внимание, что пробелы этого не исправляют.
Правило жалуется на то, что аргумент pub_lish2 НЕ соответствует определенному регулярному выражению ((^ (submit \\ + >> | >>) $)) при приеме (RX) от index.php.
Насколько я могу судить, они ввели целый ряд отдельных исключений из правила, которые вы могли бы использовать для тестирования, поэтому, читая предоставленные правила, они соответствуют каждому URL-адресу, который не является конечной точкой формы, а затем предоставляют огромный список исключений. Я бы предположил, что они пытаются удалить посторонний XSS на основе форм, но это очень плохо.
Вы, вероятно, сможете произвести довольно простой тест, изменив это конкретное поле на одно из исключений, выбрав одно наугад;
занятой
Затем посмотрите, что происходит при отправке. Если они позволят вам, вы можете попросить добавить цель pub_lish2 в список исключений.