处理“;杀死“;以大的形式输入

Dealing with "Kill" in large form input

本文关键字:输入 杀死 处理      更新时间:2023-09-26

所以詹姆斯·帕特森一直试图破解我的网站!好吧,不是真的,但他写了很多书,书名都是以"Kill"开头的,这会从我们的服务器端防火墙触发HTTP 501/HTTP 505

情况是这样的,我们的图书馆软件每周都会生成一份电子邮件报告,报告上周添加到收藏中的所有新书。我制作了一个表单(使用php/html),在这里我们可以使用C&把这些数据放进去,它会把它变成一个漂亮的小页面,展示我们的新标题。表单提交后,我会在将数据添加到MySQL数据库之前对其进行清理。"Kill"触发器发生在传递和处理表单中的数据之前。数据的格式为:

Kill shot : an American assassin thriller / Vince Flynn|Flynn, Vince|2012|9781416595205 (hbk.)|NEWBKSHELF|20120207| 

认为这样做的方法是使用一点javascript,将kill的每个实例都更改为无害的实例,然后在将其插入MySQL数据库时将其更改回。

然而,像上面这样的条目可能有数百个,我对javascript不是很好,我不确定如何完成前半部分(例如,将kill的每个实例更改为kxllill更改为kxll。)我非常有信心,当我保存数据时,我可以安全地将kxll更改回。

由于您不知道kill是否是唯一不允许的特殊单词(可能mancatls也被禁止?),因此可以对整个字符串进行编码。例如,您可以使用此方法将其转换为charcodehttp://bateru.com/news/2009/10/javascript-tips-convert-string-to-unicode-values/然后,在服务器端将其转换回。

您应该挂接到表单的onSubmit(),然后检查每个字段,然后在提交的字段包含kill时替换其值。最好使用JQuery,例如

$(function() {
    $("#formid").bind("submit", function(event) {
        $('input')
        .filter(function(){return $(this).val().indexOf("kill") !== false;})
        .each( function(index,element) {
            $(this).val($(this).val().replace(/kill/i, "kxll"));
        });
    });
});

此处演示:http://jsfiddle.net/49psu/4/

如果您想在输入中的任何位置捕获"kill",则可能需要使用$('input[value*="kill"]').replace(/kill/ig, "kxll")

更多信息:

http://api.jquery.com/each/

http://api.jquery.com/bind/

http://api.jquery.com/submit/

http://w3schools.com/jsref/jsref_replace.asp(javascript替换)

也有类似的问题,我的解决方案是……非正统的,但确实有效。

yourField.replace(/kill/ig,'(ILLEGARTAG#1)');

如果你想在他提交表单之前正确显示,只需将该功能放在onsubmit 上

然后生成一个包含非法标记的sql。

所以DB

ID    |   Word
1     |   Kill

当你想导出你的数据时,只需实时替换出现的内容。

请注意:这个解决方案不是理想的,它只是一个修复,如果你不能使用替代方案(如修复防火墙)

在提交时,您可以从表单构建一个JSON对象,然后对其进行BASE64编码并通过AJAX提交,同时取消原始表单提交。服务器上的Base64解码在PHP中通过原生支持

base64_decode($string);

请参阅http://php.net/manual/en/function.base64-decode.php

Base64在客户端通过工作

btoa(string)

请参阅https://developer.mozilla.org/En/DOM/Window.btoa了解更多信息。仅适用于Chrome和Firefox,否则请使用此处提到的脚本

如何用JavaScript将字符串编码为Base64?