2012-02-08 75 views
2

因此James Patterson一直试图破解我的网站!好吧,不是,但他已经写了不少书籍,其标题以“Kill”开头,从我们的服务器端防火墙触发了一个HTTP 501/HTTP 505处理“大量输入”中的“Kill”

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

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

认为做这将是改变的每个实例的JavaScript的一点点杀的东西无害的,然后改变它回来的路上,当我插入它进入MySQL数据库。

但是可能有上百个条目,并且我对javascript的使用并不是很好,我不确定如何完成上半部分的操作(例如,更改的所有实例,请参见killkxllkxll)。我非常相信,当我保存的数据,我可以放心地改变kxll回来。

+0

也许你用不上,但要做到这将是最好的方式来淡化这疯狂的防火墙。 – 2012-02-08 18:35:09

+0

我没有访问权限。 ): – aslum 2012-02-08 18:35:43

+0

我认为解决方案非常简单:修复防火墙。 – tplaner 2012-02-08 18:36:42

回答

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://api.jquery.com/each/

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

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

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

+0

需要不区分大小写。不知道jQuery内容选择器是否区分大小写,但替换是。应该使用.replace(/ kill/ig,“kxll”) – 2012-02-08 18:41:43

+0

我喜欢你的解决方案,但是如果他有很多单词,问题就在于它。您不存储您的更改,并且可能会变得混乱。如果只杀死他们,那么他们的行为很好 – 2012-02-08 18:42:17

+0

@RyanP好,赶快更新! – 2012-02-08 18:43:44

1

也有类似的问题,我的解决方法是...非正统的,但它确实有效。您的字段.replace(/ kill/ig,'(ILLEGALTAG#1)');

如果你想让它正确地显示他之前提交形式,只是把功能上的onsubmit

,你让包含您的非法标签一个SQL。

所以DB

ID | Word 
1  | Kill 
当你要导出数据

只需更换的发生现场。

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

+0

该问题需要在JS中的浏览器中修复,因为数据永远不会到达PHP服务器。 – 2012-02-08 18:42:37

+0

oops误读,更改了js版本的替换。 – 2012-02-08 18:43:20

0

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

base64_decode($string); 

支持PHP见http://php.net/manual/en/function.base64-decode.php

Base64编码的客户端通过

btoa(string) 

适用于更多信息,请参见https://developer.mozilla.org/En/DOM/Window.btoa。只适用于Chrome和Firefox本身,否则使用脚本这里提到

How can you encode a string to Base64 in JavaScript?

+0

在带宽上有点困难:( – jglouie 2012-02-08 20:57:16