2013-10-18 41 views
1
1. how to work php sql injection and use in site ? 

我的網站登錄過程輕鬆登錄任何用戶名用戶名爲& password.plz描述如何安全登錄過程。如何在網站上使用php sql注入和使用?

例如:

$logindetail = "select * from tablename where username = '".$_REQUEST['username']."' and password = '".$_REQUEST['password']."' "; 

$sqlrun = mysql_query($logindetail); 

$recordcount = mysql_num_rows($sqlrun); 
在這個登錄過程

如何將SQL使用注射?

+0

你能告訴我們完整的代碼嗎? –

+4

我認爲這會幫助你http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq = 1 –

+0

檢查以下鏈接http://www.tricksofit.com/2013/10/difference-between-mysql-pdo –

回答

1

更改第一行:

$logindetail = "select * from tablename where username = '".mysql_real_escape_string($_REQUEST['username'])."' and password = '".mysql_real_escape_string($_REQUEST['password'])."' "; 
+1

我沒有downvote,但這仍然是脆弱的SQL注入(雖然更難)。 'mysql_real_escape_string'函數已被棄用。 – Steve

+0

'mysql_ *'函數被折舊.. –

+0

@SumitBijvani我同意你的意見,但官方文檔我沒有發現這個函數已被廢棄:http://php.net/manual/pl/function.mysql-real- escape-string.php;) – Adam

3

目前尚不清楚,無論你要求別人解釋如何防止SQL注入,或者如何有人可能會利用SQL注入獲取到您的網站。

要防止SQL注入,請使用參數化查詢。這已經在這個問題得到了很好的解釋:How can I prevent SQL injection in PHP?

如果有人意識到自己的網站是容易受到SQL注入,他們可以登錄到您的網站的任何已知用戶名,通過進入用戶名框

admin' OR 1=1 -- 

這使得其在數據庫服務器上執行的SQL:

"select * from tablename where username = 'admin' OR 1=1 -- and password = '' " 

OR 1=1的值爲true和--評論了SQL字符串和預其餘發泄密碼檢查。

我不打算進入密碼散列,因爲我認爲這是一個小例子。

1

使用預準備語句和參數化查詢。

可以通過使用msqli http://php.net/manual/en/book.mysqli.php

快速教程實現這一目標。 http://www.phphaven.com/article.php?id=65

示例代碼

<?php 


// CONNECT TO THE DATABASE 
    $DB_NAME = 'DATABASE_NAME'; 
    $DB_HOST = 'DATABASE_HOST'; 
    $DB_USER = 'DATABASE_USER'; 
    $DB_PASS = 'DATABASE_PASSWORD'; 

    $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME); 

    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

// A QUICK QUERY ON A FAKE USER TABLE 
    $query = "SELECT * FROM `users` WHERE `status`='bonkers'"; 
    $result = $mysqli->query($query) or die($mysqli->error.__LINE__); 

// GOING THROUGH THE DATA 
    if($result->num_rows > 0) { 
     while($row = $result->fetch_assoc()) { 
      echo stripslashes($row['username']);  
     } 
    } 
    else { 
     echo 'NO RESULTS'; 
    } 

// CLOSE CONNECTION 
    mysqli_close($mysqli); 


?> 
3

使用的mysqliPDOpreprared語句執行查詢。 mysql已被棄用。
事情是這樣的: -

<?php 
    $con = new mysqli('host','user','pass','db'); 
    if(!$con) 
     die(); 
    $stmt = $con->prepare("select * from tablename where username = ? and password =?"); 
    $stmt->bind_param('ss',$_REQUEST['username'],$_REQUEST['password']); 
    $stmt->execute(); 
    $stmt->close(); 

這可能是一個更安全的方式來阻止SQL注入。瞭解更多來自Here

相關問題