2016-04-07 18 views
0

私はこれに関するかなりの研究をしてきましたが、どこに配置するかのように私の問題に対する正確な答えを見つけることができないようです。xss攻撃/注射を防ぐ

私はユーザーがログインしてJavaScriptゲームをプレイするための簡単なウェブサイトを構築しています。サイトはまだ稼働していませんが、私のサイトはXSSに対して脆弱であると言って、私のサイトにリダイレクトされたリンクが送られてきました。私が私のウェブサイトに戻ったとき、私が知らないクッキーや他のものを示す警告が現れました。リンクはもはやアクティブではないので、ログインフォームの入力フィールドに追加されたスクリプトを表示することはできません。

悪意のあるユーザーがこれを行うのを防ぐ方法はありますか?それが役に立つなら、私のログインを構成するコードはここにあります。 login.phpファイルから

<form method="post">    
    <p>Login</p> 
    <div class="form-group"> 
    <label for="login" style="float:left">Email or username</label> 
    <input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 
    <label for="loginpassword" style="float:left">Password</label> 
    <input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/> 
    </div> 
    <input type="submit" class="btn btn-success btn-lg wrap" name="submit" value="login"/> 

    <?php 
    if($error) { 
     echo '<div class="alert alert-danger" id="errorDiv">'.addslashes($error).'</div>';     
    } 
    ?>  
</form> 

<?php 
    if ($_POST['submit']=="login") 
    { 
     $login = mysqli_real_escape_string($connection_info, $_POST['login']); 
     $loginpw = $_POST['loginpassword']; 

     //check database see if correct login details 
     // if not found then $error = "incroorect login details" etc 
     // if login details then match assign id from database as session variable for authentication 
    } 
?>  

は、誰かが私は、この特定のフォームのXSSを防ぐため行う必要が正確に何を教えてもらえますか?私が読んだところでは、テキストフィールドの値にaddslashesの代わりにhtmlspecialcharsを使用すると便利ですが、問題が解決するかどうかはわかりません。

+0

http://stackoverflow.com/questions/1996122/how-to-preve nt-xss-html-php – epascarello

答えて

0

注射の概念は、コマンドとデータのあいまいさです。任意のデータがコマンドと同じ場所で使用される状況がある場合、注入の可能性があります。

XSSは、攻撃者が入力を巧みに利用してWebページの内容を制御できるかのようにXSSに適用され、悪意のあるスクリプトを追加して必要な処理を行うことができます。

問題はaddslashes()を使用しているところです。これは、HTMLのコンテキストで使用されるデータのエスケープには適切ではありません。あなたはテキストデータを持っていますが、効果的にはHTMLと扱われています。あなたのページに直接挿入しているからです。攻撃者は、スクリプトタグなどをページに追加するデータを入力することができます($_POST)。

これを修正するには、別のコンテキストで使用されているすべてのデータを適切にエスケープします。あなたの場合は、HTML内の変数の周りのhtmlspecialchars()があなたの望むものです。

$errorメッセージでも同じことが必要です。確かに、自分のサイトを攻撃する可能性は低いですが、正当なHTMLを生成したいのですか?迷い括弧でエラーメッセージが表示され、ページが壊れても驚かないでください。

0

あなたが制御していないデバイスから来るものは絶対に信頼しないでください。この場合、私はそれがブラウザであると仮定しています。すべてのコンテンツをサニタイズするかフィルタする必要があります。そのため、ブラウザに戻ったときにブラウザで実行できないようにします。また、SQLインジェクションなどに使用できないことを確認する必要がありますが、それは別の問題です。

可能な限りXSSで読み上げる必要があります。このサイトは非常に便利です...

https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

クロスサイトスクリプティング(XSS)攻撃するときに発生:

データは信頼できないソース、最も頻繁にWeb要求を介してWebアプリケーションに入ります。

データは、ウェブ に送信される動的コンテンツに含まれ、悪質なコンテンツの検証は行われません。あなたはstackoverflowのようなサイトを提供することができるが

<input class="form-control" name="login" value="<?php echo addslashes($_POST['login']); ?>"/> 

<input class="form-control" type="password" name="loginpassword" value="<?php echo addslashes($_POST['loginpassword']); ?>"/> 

すなわち生のPOSTデータを取得し、それをユーザーに返すように見えるのフォームを持っているあなたの例では

あなたが本当に必要としている問題を解決するために、XSSなどの一般的な理解が必要です。

+0

あなたの答えをありがとう。私は実際に他の情報と一緒にそのリンクを読んでいました。私の理解から、addslashesは問題で、私はhtmlspecialcharsを使う必要がありました。私はこれが唯一のXSSの脆弱性であることを100%確信したかっただけです。 – Jay

+0

これもご覧ください... https://www.owasp.org/index.php/Data_Validation – Harry

関連する問題