2017-07-27 3 views
0

は、私は、ユーザーが私は十分である私は、strip_tags()を知りたいは、JavaScriptの注入を防止

$data = $_POST['data']; 
// or 
$data = strip_tags(@$_POST['data']); 
  1. と言っていいくつかの情報を入力し、PHPとPHPのコードでを使用してサーバにsubmitedしているフォームがあるとhtmlフォームを通してjavascriptの注入を止める。もしそうでなければ、これを防ぐことができます。私はhereを読んだ。

  2. ブラウザのアドレスバーにjavascript:void(document.bgColor="blue")と入力すると、サイトの背景色全体が青色に変更されます。どのようにアドレスバーを介してJavaScriptの注入を防ぐことができます。

ありがとう。

+0

一般的には、 'filter_input()'と 'filter_input_array()'関数を使う方が良い方法です。あなたは完全に '$ _GET'や' $ _POST'などのスーパーグローバルの使用を避けるべきです。 – Octopus

+0

有名なWebサイトでさえも、そのような強力な保護はありません。 Facebookは良い保護を持っており、ブラウザのofcに応じてまだ関数を呼び出すことができます –

答えて

1

これは、取得しようとしている出力によって異なります。

いくつかのケースでは、あなたがscriptタグを含むHTMLタグを残したいと思うでしょうが、しかしあなたが出力彼らは、あなたがhtmlspecialchars($_POST['data'])を使用する必要があり、その場合には、(定義することを示唆しています時に、それらの要素が実行されないことを望みます第3のパラメータとしてutf8)。

しかし、あなたはentierly strip_tagsよりもタグを削除したい場合は、XSS

+0

ありがとうございました。あなたの答えは助けになりました。 – diagold

1

を防ぐことができます私はあなたが何かを出力するブラウザ

echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); 

チェックアウトthis

+0

ありがとうございました。あなたの答えは助けになりました。 – diagold

1

をしたい、これまでときhtmlspecialcharsを使用することをお勧め質問2、それが防止することさえ可能かどうかはわかりません。これまでに考えたことではありません。あなたがページに含まれていなかったjavascriptの実行を阻止しようとしているように思えます。これは、ブラウザのdevtoolsがコンソールで何かを実行することをブロックすることを意味します。これは、ユーザーにとって敵対的な可能性があります。 Instapaperのブックマークレットを使いたければ

1の場合、最終的には、新しいページを生成するときにこの注入されたjavascriptをフォームに含めないようにすることです。フォームからデータを出力するときは、htmlspecialcharsにラップすることができます。

+0

ありがとうございました。あなたの答えは助けになりました。 – diagold

1

1つの機能では、スクリプトの挿入から完全に保護することはできません。次のプログラムを考えてみましょう:

<?php 
if(isset($_POST['height'])) 
    $height=htmlspecialchars($_POST['height'], ENT_QUOTES, 'UTF-8'); 
else $height=200; 
if(isset($_POST['width'])) 
    $height=htmlspecialchars($_POST['width'], ENT_QUOTES, 'UTF-8'); 
else $width=300; 
echo(" 
<!DOCTYPE html> 
<html> 
<body> 
<iframe src='whatever' height=$height width=$width> 
</iframe> 
</body> 
</html> 
"); 

入力がサニタイズされていますが、JavaScriptのはまだのような単純な注入ベクトルを介して実行されます:あなたはまだあなたの属性を引用する必要があるか、このような脆弱性があり

300 onload=alert(String.fromCharCode(88)+String.fromCharCode(83)+String.fromCharCode(83)) 

例。

ユーザ入力がjavascriptコメントにエコーされ、新しい行を挿入したり、コメントを閉じることができます。私はそれを 'これはすべきだとは思えないほどうまくいきませんが、コメントの形で進めていくつもりだ」と非難します。

注:多くのブラウザのXSS保護は私の単純な例を実行しません。あなたがそれを試してみたい場合は、保護なしで使用するか、それを打ち負かすベクトルを見つけてください(例えば、Chromeの場合はわかりません)。