2011-06-29 38 views
0

你好每一個身體: 我檢查了我的網站的安全問題(漏洞)。 報告說,有一個XSS漏洞,在我的login.php頁面 其實我嘗試通過將用htmlspecialchars()在發送給我的數據庫變量來解決這個問題,但我不知道這是正確的避免XSS漏洞通過將用htmlspecialchars()函數

這裏是我的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 [ '用戶'] = 「」; DROP TABLE日誌「'不會在所有的htmlspecialchars感動。 –

+0

@Marc。如果你閱讀標題,它說XSS不是SQL。 – frostymarvelous

+0

@frosty:是的,但代碼仍然是sql易受攻擊的。 'addslashes()'是堅固牆壁的溼手紙。 –

回答

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

而且您應該使用mysql_real_escape_string()來放置SQL查詢中的變量以避免SQL注入。

+0

偉大的建議。 +1。我更喜歡自己的htmlentities。 – frostymarvelous

+0

謝謝你們......你是最棒的 –