所以James Patterson一直试图破解我的网站!好吧,不是真的,但是他已经写了很多书,其标题以“ Kill ”开头,从我们的服务器端防火墙触发 HTTP 501 / HTTP 505 。 / p>
在这种情况下,我们的图书馆软件会在每周的电子邮件报告中生成上周添加到该集合中的所有新书。我已经制作了一个表格(使用php / html),我们可以将这些数据输入C& P并将其转换成一个展示我们新标题的漂亮小页面。提交表单后,我会在将数据添加到MySQL数据库之前对其进行清理。在 Kill “触发器发生之前,可以传递和处理表单中的数据。数据格式为:
Kill shot : an American assassin thriller / Vince Flynn|Flynn, Vince|2012|9781416595205 (hbk.)|NEWBKSHELF|20120207|
我认为这样做的方法是将一些javascript更改为 kill 的每个实例,使其无关紧要,然后在插入时将其更改回来进入MySQL数据库。
然而,可能有数百个条目,如上面的那个,我对javascript不是很好,我不确定如何完成前半部分(例如更改 kill的每个实例到 kxll 和杀到 Kxll 。)我相当有信心,当我保存数据时,我可以安全地更改 kxll 返回。
答案 0 :(得分:3)
由于您不知道kill
是否是唯一不允许的特殊字词(可能man
,cat
,ls
也被禁止?),您可以编码整个字符串。例如,您可以使用此方法将其转换为charcodes http://bateru.com/news/2009/10/javascript-tips-convert-string-to-unicode-values/然后,将其转换回服务器端。
答案 1 :(得分:1)
您应该挂钩表单的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/
如果您希望在输入中的任何位置捕获“杀死”,则可能需要使用$('input[value*="kill"]')
和.replace(/kill/ig, "kxll")
。
欲了解更多信息:
http://w3schools.com/jsref/jsref_replace.asp(javascript替换)
答案 2 :(得分:1)
有一个类似的问题,我的修复是......非正统但它确实有效。
yourField.replace(/ kill / ig,'(ILLEGALTAG#1)');
如果您希望在提交表单之前正确显示,只需将该功能放在onsubmit
上并创建一个包含非法标记的SQL。
所以DB
ID | Word
1 | Kill
如果要导出数据,只需替换实时出现。
请注意:这个解决方案不是理想的,如果您不能使用替代方案(如修复防火墙),它只是一个修复方法
答案 3 :(得分:0)
在提交时,您可以从表单构建一个JSON对象,然后BASE64对其进行编码并通过AJAX提交,同时取消原始表单提交。 PHP中通过
原生支持服务器上的Base64解码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本机,否则请使用此处提及的脚本