这有点类似于403 Forbidden Error, probably ModSecurity
我在网页上有一个表单,用于提交数学公式和内容。当合法使用时,字段将包含不安全的字符“,<,>,&,'和`我正在使用
转义这些字符 ", <, >, &, ' and `
在将表单从网页提交到PHP脚本之前,我使用上述HTML实体编码/转义不安全的字符。因此,尽管字段合法地包含了不安全的字符,但提交的表单却没有。在我的PHP脚本中,我首先检查了$_POST['formFieldData'];
,如果它包含任何不安全的字符,那么我立即中止并静默中止整个帖子的处理。我的想法是,在我的网页上合法使用该表单不会包含任何不安全的字符。因此,如果有人使用针对我的PHP脚本的表单设置他们自己的页面,他们将无法发送不安全的字符。我只用HTML实体编码的不安全字符将数据写入浏览器屏幕。
最初(几年前)当我设置表单时,原始数据(包含不安全字符的合法数据)被发布到PHP脚本中,并且在对不安全字符进行编码后回显到浏览器,然后通过电子邮件发送数据给我进一步处理和存储。我收到了大量来自机器人或其他形式的诈骗/网络钓鱼/垃圾邮件。通过我在我的网页上实现编码并拒绝包含不安全字符的帖子来减少这些数量并仍然允许合法的数量。一夜之间,这些数量变为零。我必须补充一点,我还认为. : ; / \ @
不安全并编码/转义它们并删除帖子,如果它以未编码的形式包含它们。
最近,即使进行了上述清理/转义,我也开始接受XSS过滤的误报mod安全行程,阻止提交内容到达php文件进行处理。消息是“潜在的跨站点脚本攻击”
不幸的是,托管公司没有将这些旅行记录在用户日志文件中,所有告诉我的是有旅行并且他们向我发送了规则
由于规则中包含大量文字,因此我在本文末尾粘贴了该规则。
托管公司有两个建议:白名单列出规则,使其不适用于我的网站。关闭mod-security。如果可能,我宁愿不做其中一个。
规则的最后是代码t:htmlEntityDecode
,这让我觉得规则是无意义的内容,因此打败了我的html转义。
我开始使用Javascript替换.replace(/&#x/g, "x#&");
来捣乱我已转义的内容,例如PHP表单处理文件中服务器上的"
变为x#&22;
然后我解除了这个与$ form_Data = str_replace(“x#&amp;”,“&amp; #x”,$ form_Data)混淆;
这完美无缺,就是mod-security过滤器没有因为之前导致误报的内容而跳闸。
这是一个黑客,但我认为我没有别的选择,只能做某种黑客攻击。
下面详细说明的规则看起来像是一个巨大的正则表达式,还有一些针对unesape HTML实体,compressWhitespace等的指令。
如果知道这些过滤器的人可以提供一些关于我可以用来预先处理表单内容的方法的建议,然后再从网页发布它以使其更容易抵御误报,那么我将非常感激。
提前致谢。
这条规则是:
Rule 340147: Generic XSS filter
SecRule ARGS|ARGS_NAMES|!ARGS:js_includes|!ARGS:/m1_source/|!ARGS:/geodir/|!ARGS:/banner_block/
|!ARGS:/introcopy/|!ARGS:eingabe|!ARGS:ausgabe|!ARGS:/previewdata/|!ARGS:/tracking_extra/
|!ARGS:/^groups/|!ARGS:video|!ARGS:/google_map/|!ARGS:/field_map/|!ARGS:/gacode/|!ARGS:code1
|!ARGS:ga_code|!ARGS:customized|!ARGS:code_analytics|!ARGS:uvod|!ARGS:/^field_video/|!ARGS:q
|!ARGS:/^textarea-video/|!ARGS:leirro|!ARGS:lomake|!ARGS:vastaus|!ARGS:/^texte$/|!ARGS:vraag
|!ARGS:qti_data|!ARGS:tracklist|!ARGS:i_google|!ARGS:code_area_text|!ARGS:/log_code/
|!ARGS:/^ADVERT_/|!ARGS:UserData|!ARGS:areas|!ARGS:templatecode|!ARGS:/prevObject/
|!ARGS:/replaceAll/|!ARGS:/insertBefore/|!ARGS:/insertAfter/|!ARGS:/prependTo/|!ARGS:/appendTo/
|!ARGS:/mapcode/|!ARGS:googleCode|!ARGS:/sidebar/|!ARGS:/ad_code/|!ARGS:/^recipient/
|!ARGS:optional_head|!ARGS:/^form/|!ARGS:/^var_value/|!ARGS:variable_data|!ARGS:/^instance/
|!ARGS:/customfield/|!ARGS:notice|!ARGS:/formcode/|!ARGS:/ajax/|!ARGS:all|!ARGS:allowedTags
|!ARGS:/google_analytics/|!ARGS:/widget/|!ARGS:ad_code|!ARGS:/keycaptcha_code/|!ARGS:/jscode/
|!ARGS:postcontents|!ARGS:/adsense/|!ARGS:video1|!ARGS:/updateAds/|!ARGS:map|!ARGS:gmapcode
|!ARGS:/^Sidebar/|!ARGS:/^wpTextbox/|!ARGS:paragrafo|!ARGS:/question/|!ARGS:/style/
|!ARGS:tracking_code|!ARGS:whats-new|!ARGS:analyticscode|!ARGS:top_news|!ARGS:data[config]
|!ARGS:fulltext|!ARGS:introtext|!ARGS:offertext|!ARGS:block|!ARGS:livezillacode|!ARGS:/embed/
|!ARGS:/desc/|!ARGS:/script/|!ARGS:/^p_process_chats/|!ARGS:obj_itop|!ARGS:/cms/
|!ARGS:eventDescription|!ARGS:/^product/|!ARGS:match_report|!ARGS:eip_value|!ARGS:/^usergroup/
|!ARGS:sendDescription|!ARGS:email_id|!ARGS:obj_itop|!ARGS:sml_prt_1|!ARGS:pay_inst_1
|!ARGS:/^jform/|!ARGS:phpcode|!ARGS:intro|!ARGS:Snippet|!ARGS:oid|!ARGS:Submit2|!ARGS:/^obj_/
|!ARGS:layout|!ARGS:pageset|!ARGS:contact_form_information|!ARGS:/^site_/|!ARGS:/^translations/
|!ARGS:create_tables|!ARGS:insertfile|!ARGS:video_credits|!ARGS:input[Desarrollo]|!ARGS:move2
|!ARGS:hoperation|!ARGS:login_form|!ARGS:/product_benefits/|!ARGS:/custom_code/|!ARGS:arg2
|!ARGS:resumoDetalhe|!ARGS:bbcode_tpl|!ARGS:Right_photo_1|!ARGS:embedVideo|!ARGS:/^K2ExtraField/
|!ARGS:mentorhelp|!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:prefix|!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:ta|!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:/html/|!ARGS:/content/|!ARGS:/footer/|!ARGS:/header/
|!ARGS:/footer/|!ARGS:/link/|!ARGS:text|!ARGS:txt|!ARGS:/refer/|!ARGS:/referrer/|!ARGS:/template/
|!ARGS:/ajax/ "(?:< ?script|(?:<|< ?/)(?:(?:java|vb)script|about|applet|activex|chrome)|
< ?/?i?frame|\%env)" \Potential Cross Site Scripting Attack'
"phase:2,deny,status:406,t:none,t:removeNulls,t:utf8toUnicode,t:urlDecodeUni,t:htmlEntityDecode,
t:jsdecode,t:cssdecode,t:replaceComments,t:compressWhitespace,t:lowercase,capture,id:340147,
rev:137,severity:2,msg:'Atomicorp.com WAF Rules: ,logdata:'%{TX.0}'"
答案 0 :(得分:2)
如果知道这些过滤器的人可以提供一些关于我可以用来预处理表单内容的方法的建议,然后再从网页上发布,以使其更容易抵御误报,我将非常感激。
的base64?
使用时,字段将包含不安全字符
"
,<
,>
,&
,'
和“
然后mod_security对您来说不是一个很好的工具选择。 (我个人认为,像这样的输入过滤规则对任何人来说都不是一个好主意。)
这是一个黑客,但我认为除了做某种黑客攻击我别无选择。
有人对你施加mod_security吗?通过它进行隧道掘进,无论如何都会使它无效,所以它(甚至超过正常情况)是浪费时间的绝望。