处理“;杀死“;以大的形式输入
Dealing with "Kill" in large form input
所以詹姆斯·帕特森一直试图破解我的网站!好吧,不是真的,但他写了很多书,书名都是以"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
是否是唯一不允许的特殊单词(可能man
、cat
、ls
也被禁止?),因此可以对整个字符串进行编码。例如,您可以使用此方法将其转换为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?
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 名称输入的索引
- 如何编写HTML输入的JS内联
- 要求输入在数据列表中
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- 如何将输入(type=text)从html表单传递到javascript函数
- 单击jquery清除输入值
- 而循环只设置php中输入字段中的第一个值
- 在输入字段中将最小金额设置为
- jQuery自定义验证比较多个输入的序列
- Sails.js:同时发布文本输入和一个文件
- 使用javascript检查多个输入值,并在1次检查中标记多个输入框
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 使用jquery在单击时在单元格中输入值
- Ajax文件加载和<输入>文件加载
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 处理“;杀死“;以大的形式输入
- 在不杀死Javascript的情况下将Div Id转换为输入元素