2012-02-08 74 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