【问题标题】:Javascript to replace ampersand before POST ing formJavascript 在 POST 表单之前替换 & 符号
【发布时间】:2021-08-18 20:32:39
【问题描述】:

我正在尝试将一组书名传递回表单。通常在第二步中对数据进行清理,但是现在每当任何标题在第一步中包含与号时,我都会收到服务器错误。

<form id="addbsms" method="post" action="?action=addnewbooks&amp;submit=validate" >
   <Textarea name="newblist" rows="30" cols="68"></textarea>
   <button type="submit" name="Submit" onsubmit="validateForm()">Submit</button>
</form>

我尝试在提交之前制作一个 JS 进行清理,但我的 JS 排骨不是很好:

<script>
  function validateForm(){
    let x= document.forms["addnewform"]["newmlist"].value;
    return x.replace(/&/g,"and");
  }
</script>

以及导致此问题的数据示例:

Cozy cottage & cabin designs : 200+ cottages, cabins, A-frames, vacation homes, apartment garages, sheds & more / Creative Homeowner|Creative Homeowner|2019|9781580118415 (paperback)|NONFICTION|20210813|

(标题|作者|出版年份|ISBN|类型|分类|添加日期|)

错误 Mod_security 显示: [2021 年 8 月 18 日星期三 12:39:01.559409] [:error] [pid 3772:tid 4255957415680] [client -redacted-] [client -redacted-] ModSecurity:警告。模式匹配 "(?i)(?:;|\\{|\\||\\|\\||&|&&|\\n|\\r|`)\\s*[\\(, @\\'\"\\s](?:[\\w'\"\\./]+/|[\\\\'\"\\^]\\w [\\\\'\"\\^]:.\\\\|[\\^\\.\\w '\"/\\\\]\\ \\)?[\"\\^](?:s[\"\\^]*(?:y[\"\\^]s[\"\\^](?:t[\"\\^]*e[\"\\^]m[\"\\^](?:p[\"\\^]* r[\"\\^]*o[\"\\^]*p[\"\\^]*e ..." 在 ARGS:newblist。[file "/dh/apache2/template/etc/mod_sec3_CRS /REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [line "294"] [id "932115"] [msg "远程命令执行:Windows 命令注入"] [data "匹配数据:|\x0d\x0aType R :在动荡的世界中蓬勃发展的变革性弹性/ Ama Marston, Stephanie Marston|Marston, Ama|2018|9781610398060(精装本)|NONFICTION|20210813|\x0d\x0a终极指南:管道/[主要作者,Merle Henkenius;特约作者,史蒂夫Willson]|Henkenius, Merle|2021|9781580118613|NONFICTION|20210813|\x0d\x0a终极指南:管道 / [主要作者,Merle Henkenius;特约作者,Steve Willson]|Henkenius, Merle|2021|978158011 8613|NONFICTION|..."] [严重性 "CRITICAL"] [ver [hostname "-redacted-"] [uri "/pageinquestion.php"] [unique_id "YR1h1bWfXoy3zM7JSdfj8QAAAAE"],引用者:-fullurl-

【问题讨论】:

  • 我完全建议解决根本问题,而不是替换用户提供的内容 - 后者导致数据质量问题和巨大的用户困惑。
  • 浏览器应该已经在 POST 过程中对表单数据进行 URL 编码。我认为我们需要更接近 MCVE 的东西来判断出了什么问题。 (谷歌浏览器中的 F12,网络选项卡应该会显示 POST 请求数据。)
  • POST的网址对我来说似乎很奇怪;为什么必须将 URL 中的 & 符号转义到 &amp;amp;?一个简单的 & 符号本身就是 URL 参数的标准分隔符 - 转义它本身会导致不必要的问题。此外,考虑到它是一个特定于 HTML 的转义 - related SO thread
  • 最后,如果您看到的问题是 server 错误,您必须显示一些 server 代码 - 否则,我们给出的任何建议你在这里可能完全没有实际意义。请更新您问题中的代码以遵守minimal reproducible example 的概念。
  • @aslum — 然后向您的 ISP 投诉。 mod_security 对数据过滤采取了一种极其偏执的方法,它需要对任何给定的站点进行仔细的调整。随意拍打它不是一个好主意。

标签: javascript forms post


【解决方案1】:

除非 esqew 试图为您辨别 WHY(s)。由于在您上一条评论中您解释说您仍然想要“预先清理”——我决定回答。

function validateForm(){
    let x=  document.getElementById("newblist").value;
    var cleaned = x.replace(/&/g," and ");
    console.log(cleaned);
    return cleaned;
}
validateForm();
<form id="addbsms" method="post" action="?action=addnewbooks&amp;submit=validate" >
    <Textarea name="newblist" id="newblist" rows="30" cols="68"> This & That</textarea>
    <button type="submit" name="Submit" onsubmit="validateForm()">Submit</button>
</form>
    

【讨论】:

    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 2011-02-24
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多