mysql_real_escape_string
mysql_real_escape_string - 轉義特殊字符在一個SQL語句中使用的字符串
字符串 mysql_real_escape_string( 字符串 $ unescaped_string [, 資源 $ link_identifier])
.轉義特殊字符unescaped_string,考慮到當前字符集的連接,以便它是安全的放置在mysql_query它()。如果二進制數據將被插入,這個函數必須使用。
調用MySQL的庫函數mysql_real_escape_string,其中前添加反斜槓下列字符
此函數必須始終(少),用於制造的數據安全例外在發送查詢到MySQL
nescaped_string
該字符串轉義。
link_identifier link_identifier
The MySQL connection. MySQL的連接。 如果鏈接標識沒有指定,最後一個環節開幕mysql_connect()函數假定。如果沒有這樣的鏈接被發現,它會嘗試創建一個仿佛mysql_connect()函數是不帶參數的要求。如果沒有發現或連接建立一條E_WARNING級別的錯誤的產生。
例子1簡單mysql_real_escape_string()例子
<?php
// Connect
$link = mysql_connect ( 'mysql_host' , 'mysql_user' , 'mysql_password' )
OR die( mysql_error ());
// Query
$query = sprintf ( "SELECT * FROM users WHERE user='%s' AND password='%s'" ,
mysql_real_escape_string ( $user ),
mysql_real_escape_string ( $password ));
?>
例如#2例如SQL注入攻擊
<?php
// Query database to check if there are any matching users
$query = "SELECT * FROM users WHERE user=' { $_POST [ 'username' ]} ' AND password=' { $_POST [ 'password' ]} '" ;
mysql_query ( $query );
// We didn't check $_POST['password'], it could be anything the user wanted! For example:
$_POST [ 'username' ] = 'aidan' ;
$_POST [ 'password' ] = "' OR ''='" ;
// This means the query sent to MySQL would be:
echo $query ;
?>
查詢發送到MySQL的:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''選擇*從用戶其中user ='艾丹'和password = ''或''=''
這將允許任何人沒有一個有效的登錄密碼登錄。