国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

PHP安全-輸出轉(zhuǎn)義

瀏覽:75日期:2022-09-12 09:58:44
輸出轉(zhuǎn)義

另外一個(gè)Web應(yīng)用安全的基礎(chǔ)是對(duì)輸出進(jìn)行轉(zhuǎn)義或?qū)μ厥庾址M(jìn)行編碼,以保證原意不變。例如,O’Reilly在傳送給MySQL數(shù)據(jù)庫(kù)前需要轉(zhuǎn)義成O’Reilly。單引號(hào)前的反斜杠代表單引號(hào)是數(shù)據(jù)本身的一部分,而不是并不是它的本義。

我所指的輸出轉(zhuǎn)義具體分為三步:

l識(shí)別輸出

l輸出轉(zhuǎn)義

l區(qū)分已轉(zhuǎn)義與未轉(zhuǎn)義數(shù)據(jù)

只對(duì)已過(guò)濾數(shù)據(jù)進(jìn)行轉(zhuǎn)義是很有必要的。盡管轉(zhuǎn)義能防止很多常見(jiàn)安全漏洞,但它不能替代輸入過(guò)濾。被污染數(shù)據(jù)必須首先過(guò)濾然后轉(zhuǎn)義。

在對(duì)輸出進(jìn)行轉(zhuǎn)義時(shí),你必須先識(shí)別輸出。通常,這要比識(shí)別輸入簡(jiǎn)單得多,因?yàn)樗蕾囉谀闼M(jìn)行的動(dòng)作。例如,識(shí)別到客戶端的輸出時(shí),你可以在代碼中查找下列語(yǔ)句:

echo

print

printf

<?=

作為一項(xiàng)應(yīng)用的開(kāi)發(fā)者,你必須知道每一個(gè)向外部系統(tǒng)輸出的地方。它們構(gòu)成了輸出。

象過(guò)濾一樣,轉(zhuǎn)義過(guò)程在依情形的不同而不同。過(guò)濾對(duì)于不同類型的數(shù)據(jù)處理方法也是不同的,轉(zhuǎn)義也是根據(jù)你傳輸信息到不同的系統(tǒng)而采用不同的方法。

對(duì)于一些常見(jiàn)的輸出目標(biāo)(包括客戶端、數(shù)據(jù)庫(kù)和URL)的轉(zhuǎn)義,PHP中有內(nèi)置函數(shù)可用。如果你要寫(xiě)一個(gè)自己算法,做到萬(wàn)無(wú)一失很重要。需要找到在外系統(tǒng)中特殊字符的可靠和完整的列表,以及它們的表示方式,這樣數(shù)據(jù)是被保留下來(lái)而不是轉(zhuǎn)譯了。

最常見(jiàn)的輸出目標(biāo)是客戶機(jī),使用htmlentities( )在數(shù)據(jù)發(fā)出前進(jìn)行轉(zhuǎn)義是最好的方法。與其它字符串函數(shù)一樣,它輸入是一個(gè)字符串,對(duì)其進(jìn)行加工后進(jìn)行輸出。但是使用htmlentities( )函數(shù)的最佳方式是指定它的兩個(gè)可選參數(shù):引號(hào)的轉(zhuǎn)義方式(第二參數(shù))及字符集(第三參數(shù))。引號(hào)的轉(zhuǎn)義方式應(yīng)該指定為ENT_QUOTES,它的目的是同時(shí)轉(zhuǎn)義單引號(hào)和雙引號(hào),這樣做是最徹底的,字符集參數(shù)必須與該頁(yè)面所使用的字符集相必配。

為了區(qū)分?jǐn)?shù)據(jù)是否已轉(zhuǎn)義,我還是建議定義一個(gè)命名機(jī)制。對(duì)于輸出到客戶機(jī)的轉(zhuǎn)義數(shù)據(jù),我使用$html數(shù)組進(jìn)行存儲(chǔ),該數(shù)據(jù)首先初始化成一個(gè)空數(shù)組,對(duì)所有已過(guò)濾和已轉(zhuǎn)義數(shù)據(jù)進(jìn)行保存。

CODE:

<?php

$html = array( );

$html[’username’] = htmlentities($clean[’username’], ENT_QUOTES, ’UTF-8’);

echo '<p>Welcome back, {$html[’username’]}.</p>';

?>

小提示

htmlspecialchars( )函數(shù)與htmlentities( )函數(shù)基本相同,它們的參數(shù)定義完全相同,只不過(guò)是htmlentities( )的轉(zhuǎn)義更為徹底。

通過(guò)$html[’username’]把username輸出到客戶端,你就可以確保其中的特殊字符不會(huì)被瀏覽器所錯(cuò)誤解釋。如果username只包含字母和數(shù)字的話,實(shí)際上轉(zhuǎn)義是沒(méi)有必要的,但是這體現(xiàn)了深度防范的原則。轉(zhuǎn)義任何的輸出是一個(gè)非常好的習(xí)慣,它可以戲劇性地提高你的軟件的安全性。

另外一個(gè)常見(jiàn)的輸出目標(biāo)是數(shù)據(jù)庫(kù)。如果可能的話,你需要對(duì)SQL語(yǔ)句中的數(shù)據(jù)使用PHP內(nèi)建函數(shù)進(jìn)行轉(zhuǎn)義。對(duì)于MySQL用戶,最好的轉(zhuǎn)義函數(shù)是mysql_real_escape_string( )。如果你使用的數(shù)據(jù)庫(kù)沒(méi)有PHP內(nèi)建轉(zhuǎn)義函數(shù)可用的話,addslashes( )是最后的選擇。

下面的例子說(shuō)明了對(duì)于MySQL數(shù)據(jù)庫(kù)的正確的轉(zhuǎn)義技巧:

CODE:

<?php

$mysql = array( );

$mysql[’username’] = mysql_real_escape_string($clean[’username’]);

$sql = 'SELECT *

FROM profile

WHERE username = ’{$mysql[’username’]}’';

$result = mysql_query($sql);

?>

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 久久一级视频 | 久久综合久久美利坚合众国 | 婷婷91| 免费午夜扒丝袜www在线看 | 亚洲伊人色综合网站亚洲伊人 | 欧美一线高本道高清在线 | 国产成人一区二区在线不卡 | 国产精品爽爽va在线观看无码 | 一级国产a级a毛片无卡 | 新婚第一次一级毛片 | 日本欧美一区二区三区不卡视频 | 免费国产一级特黄久久 | 亚洲精品国产成人中文 | 日本女人在线观看 | 青草青99久久99九九99九九九 | 精品国产综合区久久久久99 | 日韩视频观看 | 久久99久久成人免费播放 | 91九色国产| 美国一级欧美三级 | 亚洲精品久久久久综合中文字幕 | 国产在线观看成人 | 欧美一级毛片欧美毛片视频 | 成人三级做爰在线视频 | 久久久91精品国产一区二区 | 99精品久久精品一区二区 | 99久久99久久精品免费看子 | 男人的天堂黄色 | 国产综合成人亚洲区 | 午夜在线伦理福利视频 | a级日韩乱理伦片在线观看 a级特黄毛片免费观看 | 国产欧美精品综合一区 | 免费国产a | 日产日韩亚洲欧美综合搜索 | 交视频在线观看国产网站 | 国产精品爱久久久久久久三级 | 久久在线免费观看 | 毛片在线播放a | 亚洲视频毛片 | 国产午夜一级淫片 | 亚洲一区二区三区国产精品 |