2011-06-29 1 views
0

hallo全身: セキュリティ上の問題(脆弱性)について私のウェブサイトをチェックしました。 報告書によると、XSSの脆弱性があると私のlogin.phpページ に、実際に私のデータベースに送信する変数にhtmlspecialchars()を入れてこの問題を解決しようとしていますが、これが正しいかどうかわかりませんHTMLSPECIALCHARS()関数を実装してXSSの脆弱性を回避してください

ここlogin.phpページのための私のPHPコードは次のとおりです。

<?php require_once('../Connections/minisrty.php'); ?> 
<?php 
// *** Validate request to login to this site. 
if (!isset($_SESSION)) { 
    session_start(); 
} 

$loginFormAction = $_SERVER['PHP_SELF']; 
if (isset($_GET['accesscheck'])) { 
    $_SESSION['PrevUrl'] = $_GET['accesscheck']; 
} 

if (isset($_POST['user'])) { 
    **htmlspecialchars($loginUsername=$_POST['user'],ENT_QUOTES,'utf-8');** 
    **htmlspecialchars($password=$_POST['pass'],ENT_QUOTES,'utf-8');** 
    $MM_fldUserAuthorization = ""; 
    $MM_redirectLoginSuccess = "insertion.php"; 
    $MM_redirectLoginFailed = "login.php"; 
    $MM_redirecttoReferrer = false; 
    mysql_select_db($database_minisrty, $minisrty); 

    $LoginRS__query=sprintf("SELECT username, password FROM log WHERE username='%s' AND password='%s'", 
    get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); 

    $LoginRS = mysql_query($LoginRS__query, $minisrty) or die(mysql_error()); 
    $loginFoundUser = mysql_num_rows($LoginRS); 
    if ($loginFoundUser) { 
    $loginStrGroup = ""; 

    //declare two session variables and assign them 
    $_SESSION['MM_Username'] = $loginUsername; 
    $_SESSION['MM_UserGroup'] = $loginStrGroup;  

    if (isset($_SESSION['PrevUrl']) && false) { 
     $MM_redirectLoginSuccess = $_SESSION['PrevUrl']; 
    } 
    header("Location: " . $MM_redirectLoginSuccess); 
    } 
    else { 
    header("Location: ". $MM_redirectLoginFailed); 
    } 
} 
?> 

この作品がする... ???

+0

htmspecialcharsは、htmlの挿入を防止するためのものです。誰かがあなたのデータベースを覆すのを防ぐために何もしません。 '$ _POST ['user'] =" ';ドロップテーブルログ "はhtmlspecialcharsによってまったく触れられませんでした。 –

+0

@Marc。あなたがタイトルを読んでいれば、それはXSSではなくSQLと言います。 – frostymarvelous

+0

@frosty:はい、コードはまだSQLの脆弱です。 'addslashes()'は含浸可能な濡れたトイレットペーパーです。 –

答えて

4
$filtered_variable = htmlspecialchars($bad_variable, ENT_QUOTES); 

そして、あなたは、SQLインジェクションを回避するために、SQLクエリで置かれている変数にmysql_real_escape_string()を使用する必要があります。

+0

すばらしいアドバイス。 +1。私は自分でhtmlentitiesを好む。 – frostymarvelous

+0

皆さんありがとうございます...あなたは最高です –

関連する問題