2012-02-08 5 views
2

James Pattersonは私のウェブサイトをハックしようとしています!さて、実際はそうではありませんが、 "Kill"で始まるタイトルの書籍がかなりありましたが、HTTP 501/HTTP 505がサーバーサイドのファイアウォールから発せられています。大きなフォーム入力で「Kill​​」を扱う

ライブラリソフトウェアは、先週のコレクションに追加されたすべての新しい書籍を週次電子メールレポートとして生成します。私はフォームを作った(php/htmlを使って)C & Pでこのデータを入力すると、新しいタイトルを表示している素敵な小さなページに変換されます。フォームが提出されると、データがMySQLデータベースに追加される前にそのデータをサニタイズします。 "Kill"トリガは、フォームからのデータを渡して処理する前に発生します。データのフォーマットは来る:私は挿入していたときに

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

私はのすべてのインスタンスを変更するJavaScriptの少しは無害なものにを殺すし、それをバックに変更になり、これを行うための方法を考えるそれはMySQLのデータベースに。

しかし、上記のような数百のエントリがある可能性があります。私はjavascriptであまりよくありません。これの前半をどのように達成するのかはわかりません(例えばのすべてのインスタンスを変更するとにkxllキル Kxllに。)私は、データを保存するとき、私は安全にkxllバックを変更することができることをかなり確信しています。

+0

スクリプトを使用するだけたぶんあなたがアクセス権を持っていないが、これを行うための最善の方法は、その非常識なファイアウォールをトーンダウンするだろう。 –

+0

私にはアクセスできません。 ): – aslum

+0

私は解決策がかなり簡単だと思います:あなたのファイアウォールを修正してください。 – tplaner

答えて

1

フォームのonSubmit()にフックし、すべてのフィールドを確認してから、送信されたフィールドにkillが含まれている場合は値を置き換えます。ベストこれは

$(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")); 
     }); 
    }); 
}); 

デモここでは例えば、jQueryを使って行われます。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(ジャバスクリプトを置き換える)

+0

大文字と小文字を区別する必要があります。 jQueryのコンテンツセレクタが大文字と小文字を区別していて、置き換えられているかどうかは不明です。 .replace(/ kill/ig、 "kxll")を使用する必要があります。 –

+0

あなたの解決策は気に入っていますが、あなたは変更を保存しておらず、乱雑になる可能性があります。唯一のthoを殺す場合、うまく動作します。 –

+0

@RyanPいいキャッチが更新されました! –

1

は、同様の問題を抱えていたし、私の修正が...異例ですが、それうまくいった。

yourField.replace(/ kill/ig、 '(ILLEGALTAG#1)');

あなたは彼がフォームを送信する前に、それが正しく表示したい場合は、ちょうどをonSubmit

上の機能を入れて、あなたはあなたの不正なタグが含まれているSQLを作ります。

ので、DB

ID | Word 
1  | Kill 

あなただけの出現のライブを交換してデータをエクスポートします。

注意してください:このソリューションは理想的ではない、killがないだけで、特殊な単語であるかどうかわからないので、あなたはrlly

+0

データがPHPサーバーに到達しないため、問題はブラウザでJSで修正する必要があります。 –

+0

oops misread、jsバージョンの置き換えを変更しました。 –

3

(修正ファイアウォールなど)の代替を使用できない場合、それはただの修正です(おそらくmancatlsも禁止されています)、文字列全体をエンコードできます。たとえば、このメソッドを使ってcharcodeに変換することができますhttp://bateru.com/news/2009/10/javascript-tips-convert-string-to-unicode-values/次に、それをサーバー側に戻して変換します。

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

関連する問題