问题描述
我有一个 Web 应用程序,它提交一个 FormData 对象作为 AJAX 调用的一部分。该 FormData 对象包含 Markdown 内容,其中一小部分作为示例如下所示:
One of the well kNown tenets of Python is:
> There should be one (and preferably only one) obvIoUs way to do it.
There are plenty of places in the Python universe where this tenet is blatantly ignored,but none tickles me quite like [shutil.copy](https://docs.python.org/3.8/library/shutil.html?copy#shutil.copy)
and [shutil.copy2](https://docs.python.org/3.8/library/shutil.html?copy#shutil.copy2).
此处的 Markdown 非常简单,但我的虚拟主机 (DreamHost) 的 ModSecurity 安装触发了此数据,并且拒绝了对我的应用程序的请求。这对我来说似乎是一个非常明显的误报。显然,以下正则表达式模式与内容匹配:
ModSecurity:警告。模式匹配 "(?i)(?:;|\\{|\\||\\|\\||&|&&|\\n|\\r|`)\\s*[\\(,@\\'\"\\s](?:[\\w'\"\\./]+/|[\\\\'\"\\^]\\w [\\\\'\"\\^]:.\\\\|[\\^\\.\\w '\"/\\\\]\\ \\)?[\"\\^](?:m[\"\\^]*(?:y[\"\\^]*s[\"\\^]*q[ \"\\^]l(?:[\"\\^](?:d[\"\\^]*u[\"\\^]*m[\"\ \^]*p(?:[\"\\^]*s[\"\\^ ..." at ARGS:content.
[msg "远程命令执行:Windows 命令注入"] [data "匹配数据:`在 ARGS 中找到的副本:内容:Python 众所周知的原则之一是:\x0a\x0a> 应该有一个(并且最好只有一种)显而易见的方法。\x0a\x0a Python 世界中有很多地方公然忽略了这一原则,但没有一个像 shutil.copy 和 shutil.copy2 那样让我发痒。\x0a\ x0a两种方法都复制文件..."]
我通过 AJAX 查询提交数据如下(为简洁起见进行了修剪):
let formData = new FormData();
formData.append('content',postContent); // postContent has the Markdown text
$.ajax({
'beforeSend': (xhr,settings) => {
injectToken(this,xhr,settings);
},'cache': false,'contentType': false,'data': formData,'processData': false,'type': "POST",'url': theURLToPostTo
})
如何编码或捆绑此 Markdown 文本以传递到应用程序而不触发如上所示的误报?我想我可以在客户端对数据进行 base-64 编码,但是还有其他方法可以处理吗?我认为这应该无关紧要,但是这个应用程序的后端是一个 Django 应用程序。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)