2017-10-12 9 views
0

Goodmorning guys、SQLインジェクションに対するユーザー入力をエンコードする

私はクライアントのフォームに取り組んでいます。フォームが実行されるサーバーには、非常に厳しいファイアウォールがあります。現時点では、メッセージに句読点が多すぎるため、ファイアウォールの問題を抱えています。ファイアウォールはこれをSQLインジェクションと見なしています。

送信ボタンをクリックすると、AJAXリクエストはすべてのメール送信を処理するPHPファイルに送られます。

$.ajax({ 
    type: "POST", 
    url: '/wp-content/themes/THEMENAME/wp/actions/apply-position-mail.php', 
    data: { 
     job: $('input#jobtitle').val(), 
     firstname: $('input#first-name').val(), 
     lastname: $('input#last-name').val(), 
     email: $('input#email').val(), 
     phone: $('input#tel').val(), 
     resume: filename, 
     comments: comments 
    } 
}); 

だけで私は/エンコード文字列(特にコメント」欄)を復号化するためにJavaScriptで方法を探していますので、ファイアウォールが全く問題にそれらを掲載していません置きます。

私はグーグルでJSの機能をエンコードしようとしましたが、誰もそのトリックを行っていませんでした。

何か助けていただければ幸いです。

+0

をhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent) – Chase

+0

"フォームが実行されるサーバーには、非常に厳しいファイアウォールがあります"。ファイアウォールの定義を調べるべきだと思います。 https://en.wikipedia.org/wiki/Firewall_(computing)には良いサマリーがあります。ファイアウォールはポートではなくデータをブロックします。あなたが実際に話しているのは、送信されたデータを検証するコードです。これはPHPコードにあり、ファイアウォールではありません。これは、精度がすべてであり、混乱が遅延やエラーを引き起こし、正しい用語を使用するコンピューティングに役立つためにのみ言及します。 – ADyson

+0

しかし、とにかく質問に答えるには、フィルタリングを行っているPHPコードと、ブロックされているもののいくつかの例を見ておくと便利です。句読点は、とにかく、注射攻撃を行う手段ではありません - それが決定要因であることは確かですか?実際には、特定の文字を拒否する他のビジネス上の理由がない限り、注射攻撃を防ぐための方法には欠陥があると私は考えます。クエリを書くためにパラメータ化されたクエリなどを正しく使用している場合は、厳密にする必要はありません。 – ADyson

答えて

0

私たちはホスティング会社と一緒にソリューションを探しました。これは私のJSです:

var formArray = $('form').serializeArray(); 
var returnArray = {}; 

for (var i = 0; i < formArray.length; i++) { 
    returnArray[formArray[i].name] = formArray[i].value; 
} 

$.ajax({ 
    url: '[..]/apply-position-mail.php', 
    type: "POST", 
    data: JSON.stringify(returnArray), 
    contentType: "application/json", 
    success: function(data, msg) { 
     console.log(msg, data); 
    }, 
    error: function(data, msg) { 
     console.log(msg, data); 
    } 
}); 

すべての入力フィールドと値は、配列に集められていて、転記前に文字列化されています。

これは私にポストされたデータ与えPHPで

:試してみて、それが動作しますが、適切な開始時に最高のチャンスが使用するまで、[encodeURIComponentで](祈ることになるだろうフィルタリングなっているもの知らず

$rawPostData = file_get_contents('php://input'); 
$form = json_decode($rawPostData); 
関連する問題