2012-05-25 36 views
-1

可能重複:
Best way to stop SQL Injection in PHP我的登錄腳本被黑客攻擊

我的登錄腳本被黑客攻擊(黑客可以繞過登錄,進入會員節)。

這裏是我的登錄名:

<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
<table width="450px"><tr><td> 
<?php 
if(isset($_POST['login'])) 
{ 

$user= mysql_real_escape_string($_POST['username']); 
$user22 = strip_tags($user); 
$pass= mysql_real_escape_string($_POST['password']); 
$pass2 = strip_tags($pass); 
$pass1 = md5($pass2); 

$mod = 1 ; 

$sql = "SELECT * FROM users WHERE username='".$user22."' AND password = '".$pass1."'"; 
$result = mysql_query($sql) or die(mysql_error()); 
$battle_get = mysql_fetch_array($result); 

if ($battle_get['mod'] == 1) { 
       $month = time() + 3600*24*30; 
       $hour = time() + 3600*1*1; 
       $LastLogin = date('l, M d, Y H:i:s'); 
       $_SESSION['user'] = $_POST['username']; 
       setcookie("save_user", stripslashes(htmlentities($user22)), $hour); 
       setcookie("save_pass", stripslashes(htmlentities($user22)), $month); 
       $username = stripslashes(htmlentities($user22)); 
       $result = mysql_query("UPDATE users SET LastLogin = '$LastLogin' WHERE username='$username'"); 
       header("location: home.php"); 
} 

} 
?></td></tr></table> 
<ul><li class="topper" style="width:410px;"></li> 
<table> 
<tr><td>Username</td><td><input type="text" name="username" id="textfield"></td></tr> 
<tr><td>Password</td><td><input type="password" name="password" id="textfield"></td></tr> 
</table><li class="bottomer" style="width:410px;"></li></ul> 
<table><tr><td><input type="submit" name="login" value="login" id="button"></td></tr></table> 
</form> 

然後在我的配置文件,我有這樣的代碼,更改IP每次登錄停止用戶等

if(isset($_SESSION['last_ip']) == false){ 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
    } 

    if ($_SESSION['last_ip'] !== $_SERVER['REMOTE_ADDR']){ 

    session_unset(); 
    session_destroy(); 

    } 

if(empty($_SESSION['user'])){ 
     echo"Please login into the rpg first" ; 
     die; 
} 

我inculde配置文件(上面的代碼)在每個頁面上如果是空的話阻止用戶在站點中查看......黑客告訴我他正在使用sql進入.....

我在做什麼錯?

+0

我會推薦閱讀[最好的辦法來阻止在PHP中的SQL注入] [1] [1]:http://stackoverflow.com/問題/ 60174 /最佳方式停止 - SQL注入在PHP –

+0

你怎麼知道密碼不是蠻力?你確定他們正在黑客腳本,或者他們只是猜測正確的用戶名和密碼。 – Kibbee

+0

有很多SQL注入討論正在進行,但沒有正確保護他們:/ –

回答

0

查找到Sql Injection,並查看的例子在這裏: http://www.unixwiz.net/techtips/sql-injection.html

你特定的SQL的樣子:

$sql = "SELECT * FROM users WHERE username='".$user22."' AND password = '".$pass1."'"; 

這是成熟的SQL注入攻擊。

看一看以下一些:

這些只是用於搜索,當幾頂鏈接如何防止在PHP中的SQL注入攻擊。

+1

$ user是從mysql_real_escape_string($ _ POST ['username'])獲得的; 所以它應該已經逃脫。然而,是否有可能是由於條形標籤導致某些逃脫未轉義的事件。雖然我懷疑它。 – Kibbee

+0

我將如何改變?因爲一切都逃脫了 – user1405062

2

他正在使用SQL注入。他正在改變「用戶名」的$ _ POST喜歡的東西

"username; OR 1=1" 

而且由於1 = 1是「真」,這讓他在你不保護從「;」

Theres大量關於SQL注入的信息以及如何保護自己。

+1

我該如何解決這個問題? – user1405062

+2

http://www.php.net/manual/en/pdo.prepared-statements.php – Laurence

+0

因此,而不是使用$ pass1我使用:pass1 ?? – user1405062

0

請看看到this post

他有關SQL注入講解和mysql_real_escape_string();