2016-07-22 13 views
0

基本的に誰かが私のサイトはXSS攻撃の脆弱性があると私に言ったので、私はそれを修正する努力をしています。私はhtmlspecialcharsメソッドがこれを防ぐための素晴らしい方法だと言われました。このコードでXSS攻撃を防止できましたか?

私は

function _e($string){ 
    return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 
} 

この機能を作ったそして、私は、このような

$userName = _e($_POST['userName']); 
$Pass = _e($_POST['password']); 

質問以下のようにそれを使用しています:

1)のみの入力に基づいて、XSS攻撃されますか、アラートとエコーステートメントでこれを行う必要がありますか? ?

1)あなたのメッセージ以外の任意のソースからのデータが含まれている場合:

2)は私が成功し、以下のページにXSS攻撃を停止**

<?php 

    session_start(); 

    if(isset($_SESSION['user_id'])){ 
     header("Location: index.php"); 
    } 

    function _e($string){ 
     return htmlspecialchars($string, ENT_QUOTES, 'UTF-8'); 
    } 

    include '../includes/connection.php'; 
    $userName = _e($_POST['userName']); 
    $Pass = _e($_POST['password']); 



    if(!empty($userName) && !empty($Pass)){ 

     $sql = "SELECT * FROM Admins WHERE Username='$userName'"; 
     $sqlr = mysqli_query($connect,$sql); 
     $sqlrow = $sqlr->fetch_assoc(); 
     $dbPass = $sqlrow['Password']; 
     $hash = password_verify($Pass, $dbPass); 

     if ($hash == 0){ 
      die("There was no password found matching what you have entered."); 
     }else{ 
      $records = "SELECT * FROM Admins WHERE Username='$userName' AND Password='$dbPass' AND AdminLevel >=1"; 
      $results = mysqli_query($connect,$records); 
      if ($results->num_rows == 1){ 
       $row = $results->fetch_assoc(); 
       $_SESSION['user_id'] = $row['ID']; 
       $_SESSION['admin_level'] = $row['AdminLevel']; 
       $_SESSION['user_name'] = $row['Username']; 
       $easyName = $_SESSION['user_name']; 
       $recordsS = "UPDATE `Admins` SET Status='1' WHERE Username='$userName'"; 
       $resultsS = mysqli_query($connect,$recordsS); 
       header("Location: index.php"); 
      }else{ 
       $message = "Either you have entered the incorrect login information, or you account has not been approved yet."; 
       echo "<script type='text/javascript'>alert('$message');</script>"; 
      } 
     } 
    } 
?> 
<!doctype html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>ServerSide Moderation Services</title> 
     <link rel="stylesheet" href="../styles/mainStyles.css" type="text/css" /> 
     <link rel="stylesheet" href="../styles/loginFormStyle.css" type="text/css" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
    </head> 
    <body class="body"> 
     <?php include '../includes/header.php'; ?> 

     <div class="mainContent"> 
      <div class="logRegArea"> 
       <article class="leftContent"> 
        <header> 
         <h2 class="loginArea" style="text-align:center">Login Below:</h2> 
        </header> 
        <content> 
         <div id="login"> 
          <form action="../pages/login.php" method="POST"> 
           <input type="text" placeholder="Enter Your Username" name="userName"> 
           <input type="password" placeholder="Enter Your Password" name="password"> 
           <input type="submit"> 
          </form> 
         </div> 
        </content> 
       </article> 
      </div> 
     </div> 
     <footer class="mainFooter"> 
      <p>This website was developed by ROBLOX user: <a href="https://www.roblox.com/users/8869935/profile" title="Made by: wattleman">wattleman</a></p> 
     </footer> 
    </body> 
</html> 
+0

パスワードにPHPのハッシュ関数を使用してください。プレーンテキストのパスワードを保存しないでください! –

答えて

1

を直接あなたの二つの質問に回答する必要がありあなたのコードは、それを浄化します。何も信じない。

2)種類。私はどこでもあなたのデータの出力を見ることができません。

ここで考慮する必要があるのは2つあります。

1)htmlspecialcharsをデータベースに挿入する前にユーザーが入力したデータに適用すると、XSSの問題のほとんどが解決されます。しかし、一般的にデータ "生"を挿入する方が良いです。にエコーアウトした時点でhtmlspecialcharsを適用してください。これは、HTMLエンティティの変換はHTMLの生成には意味がありますが、他には何もありません。検索を実行したり、エクスポートなどを作成する必要がある場合は、これらのエンティティを再び元に戻す必要があるかもしれません。

2)あなたはSQLインジェクション攻撃を受けています。 htmlspecialcharsはそれに対してゼロの防御を提供します。 mysqli_real_escape_stringまたはパラメータ化されたクエリを使用する必要があります。その詳細情報here

+0

私はフィードバックを感謝します。私が今までに取り入れるのは生データだけです。アラートをポップアップすると、スペシャルチャーを使う必要があるのですか、それとも入力がないエコーなのでいいですか? 2)私は今準備された声明で作業しています。 – Austin

+0

メッセージがエスケープされていないHTMLエンティティの可能性のない100%信頼できるソースからのものである場合(例:あなたのハードコードされたテキストは、それを衛生的にしようとする理由はありません – rjdown

+0

私は完全に質問を変更しました。あなたはそれを通過し、問題を見つけるのを手助けしますか? – Austin

関連する問題