欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

腳本安全的本質(zhì)_PHP+MYSQL第2/3頁

 更新時間:2008年10月03日 20:21:00   作者:  
從代碼級別上,也就是應(yīng)用層次上考慮代碼安全的話(也就是不考慮底層的語言本身等問題的漏洞),腳本安全問題就是函數(shù)和變量的問題。

2 隱式的輸入
上面這些是最原始的,沒有經(jīng)過程序轉(zhuǎn)換的數(shù)據(jù),程序很多地方用到的變量都來自這里,但也不表示其他的地方?jīng)]有變量傳遞過來,下面有一個數(shù)據(jù)傳遞的模式:
用戶傳遞的數(shù)據(jù)===========>數(shù)據(jù)庫===========>程序代碼處理=======>程序代碼
這個模式的意思是用戶的輸入可能先進(jìn)入了數(shù)據(jù)庫,然后程序從數(shù)據(jù)庫再取得這個輸入送入某些危險的函數(shù)執(zhí)行,一般的程序員都會有一個意識認(rèn)為從數(shù)據(jù)庫中取得的變量是安全的,但是事實并不如此,只要某些敏感字符最終送入到程序代碼中,不管他中間停留在什么地方,都是危險的。與存儲在數(shù)據(jù)庫中類似的情況是,一些程序把用戶的輸入放到文件中,如緩存文件,然后在必要的時候從里面取得,如果太過相信這些地方來的變量,這樣還是會導(dǎo)致問題的。
3 變量覆蓋
還有很多的時候,程序收到的變量很可能來自他不應(yīng)該來的地方,譬如Dz的代碼:
$magic_quotes_gpc = get_magic_quotes_gpc();
@extract(daddslashes($_POST));
@extract(daddslashes($_GET));
if(!$magic_quotes_gpc) {
$_FILES = daddslashes($_FILES);
}
這樣之后,你還覺得$_FILES是原來的$_FILES了么?如果我們建立一個_FILES的表單或者干脆在url里加上 php?_FILES[]=ddddd,這樣之后$_FILES已經(jīng)完全被覆蓋了,然后你代碼里引用的$_FILES就不是原來的了,在Dz以前的版本中曾經(jīng)出現(xiàn)過這個問題。這應(yīng)該屬于變量覆蓋的問題,把初始化的那個文件放大來看看吧:
復(fù)制代碼 代碼如下:

$magic_quotes_gpc = get_magic_quotes_gpc();
@extract(daddslashes($_POST));
@extract(daddslashes($_GET));
if(!$magic_quotes_gpc) {
$_FILES = daddslashes($_FILES);
}
$charset = $dbcharset = '';
$plugins = $hooks = array();
require_once DISCUZ_ROOT.'./config.inc.php';
require_once DISCUZ_ROOT.'./include/db_'.$database.'.class.php';
if($attackevasive) {
require_once DISCUZ_ROOT.'./include/security.inc.php';
}

這樣貌似是沒有問題的,但是滿足一定的條件的話還是可能出問題,假設(shè)register_globals為on的話,我們進(jìn)入全局的變量不只是$_GET 和$_POST吧!包括$_COOKIE和$_FILES以及$_SERVER都是會在全局?jǐn)?shù)組中產(chǎn)生變量的,通過上面的語句,我們提交一個 php?_SERVER[PHP_SELF]就可以覆蓋掉_SERVER數(shù)組,那么整個程序中的$_SERVER數(shù)組都是不可以相信的了。我也見過這樣寫的代碼:
復(fù)制代碼 代碼如下:

require_once ROOT_PATH.'inc/database_config.php';
require_once
ROOT_PATH.'inc/dv_spacemain.php';
if(PHP_VERSION < '4.1.0') {
$_GET = &$HTTP_GET_VARS;
$_POST = &$HTTP_POST_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_ENV = &$HTTP_ENV_VARS;
$_FILES = &$HTTP_POST_FILES;
$_SESSION =& $HTTP_SESSION_VARS;
}
$magic_quotes_gpc = get_magic_quotes_gpc();
$register_globals = @ini_get('register_globals');
if(!$register_globals || !$magic_quotes_gpc) {
@extract(i_addslashes($_POST));
@extract(i_addslashes($_GET));
@extract(i_addslashes($_COOKIE));
if(!$magic_quotes_gpc) {
$_FILES = i_addslashes($_FILES);
}
}

同樣是在系統(tǒng)初始化的地方,但是變量的釋放是在
require_once ROOT_PATH.'inc/general_funcs.php';
require_once ROOT_PATH.'inc/dv_spacemain.php';
這些關(guān)鍵變量初始化之后,那么我們完全可以提交一個?$host=xxx.xxx.xxx.xxx這樣的東西覆蓋掉系統(tǒng)自己的數(shù)據(jù)庫初始化文件里的數(shù)據(jù)庫地址變量,然后就可以
4 變量感染
這個很容易理解,當(dāng)一個變量不安全的時候,與之有關(guān)的賦值等操作都是不安全的,譬如:
$id = $_GET[id];
..
$articleid = $id;
實際過程中可能沒有這么明顯,但是結(jié)果是一樣的,只要某個變量把敏感字符帶入不該帶的地方,那么就會產(chǎn)生威脅,不只是變量,不安全的函數(shù)會讓使用這個函數(shù)的所有代碼都變的不安全。

相關(guān)文章

最新評論