首页 > 解决方案 > Javascript 在 POST 表单之前替换 & 符号

问题描述

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

<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 显示:[Wed Aug 18 12:39:01.559409 2021] [: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。[文件 "/dh/apache2/template/etc/mod_sec3_CRS/REQUEST-932-APPLICATION-ATTACK-RCE.conf"] [行 "294"] [id "932115"] [msg "远程命令执行:Windows 命令注入"] [数据“匹配数据:|\x0d\x0aType R:在动荡的世界中蓬勃发展的变革性弹性/Ama Marston, Stephanie Marston|Marston, Ama|2018|9781610398060(精装本)|NONFICTION|20210813|\x0d\x0a终极指南:管道/ [主要作者,Merle Henkenius;特约作者,Steve Willson]|Henkenius,Merle|2021|9781580118613|NONFICTION|20210813|\x0d\x0a终极指南:管道 / [主要作者,Merle Henkenius;特约作者,Steve Willson]|Henkenius , Merle|2021|9781580118613|NONFICTION|..."] [严重性"CRITICAL"] [ver [hostname "-redacted-"] [uri "/pageinquestion.php"] [unique_id "YR1h1bWfXoy3zM7JSdfj8QAAAAE"],引用者:-fullurl-

标签: javascriptformspost

解决方案


除非那个 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>
    


推荐阅读