php 一些基本安全處理技巧

來源:互聯網
上載者:User

對於一些常見的輸出目標(包括用戶端、資料庫教程和URL)的轉義,PHP 中有內建函數可用。
如果你要寫一個自己演算法,做到萬無一失很重要。需要找到在外系統中特殊字元的可靠和完整的列表,以及它們的表示方式,這樣資料是被保留下來而不是轉譯了。
最常見的輸出目標是客戶機,使用htmlentities( )在資料發出前進行轉義是最好的方法。與其它字串函數一樣,它輸入是一個字串,對其進行加工後進行輸出。但是使用htmlentities( )函數的最佳方式是指定它的兩個選擇性參數:引號的轉義方式(第二參數)及字元集(第三參數)。引號的轉義方式應該指定為ENT_QUOTES,它的目的是同時轉義單引號和雙引號,這樣做是最徹底的,字元集參數必須與該頁面所使用的字元集相必配。
為了區分資料是否已轉義,我還是建議定義一個命名機制。對於輸出到客戶機的轉義資料,我使用$html 數組進行儲存,該資料首先初始化成一個空數組,對所有已過濾和已轉義資料進行儲存。

<?php教程
$html = array( );
$html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8');
echo "<p>Welcome back, {$html['username']}.</p>";
?>

小提示
htmlspecialchars( )函數與htmlentities( )函數基本相同,它們的參數定義完全相同,只不過是htmlentities( )的轉義更為徹底。通過$html['username']把username 輸出到用戶端,你就可以確保其中的特殊字元不會被瀏覽
器所錯誤解釋。如果username 只包含字母和數位話,實際上轉義是沒有必要的,但是這體現了深度防範的原則。轉義任何的輸出是一個非常好的習慣,它可以戲劇性地提高你的軟體的安全性。
另外一個常見的輸出目標是資料庫。如果可能的話,你需要對SQL 陳述式中的資料使用PHP內建函數進行轉義。對於MySQL 使用者,最好的轉義函數是mysql教程_real_escape_string( )。如果你使用的資料庫沒有PHP 內建轉義函數可用的話,addslashes( )是最後的選擇。
下面的例子說明了對於MySQL 資料庫的正確的轉義技巧:

<?php
$mysql = array( );
$mysql['username'] = mysql_real_escape_string($clean['username']);
$sql = "SELECT *
FROM profile
WHERE username = '{$mysql['username']}'";
$result = mysql_query($sql);
?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.