AL8 Forum » 網頁製作及程式語言區 » 利用 .htaccess 關閉 register_globals 及 magic_quotes_gpc


2008-1-20 16:09 bananasims
利用 .htaccess 關閉 register_globals 及 magic_quotes_gpc

register_globals 同 magic_quotes_gpc 因為其安全問題已經臭名遠播
PHP6 已經會刪除呢兩個特性

一個好既程式係唔會利用 register_globals() 同埋 magic_quotes_gpc 既特性 ( 例如 MediaWiki, Joomla! )
而一個唔好既程式係會利用呢兩個特性, 而造成一啲好不必要既安全性問題 ( 例如 Discuz! ( Discuz! Lite 除外 ) )
不過就算用一啲好既程式 ( MediaWiki ) 都會有比 register_globals 同 magic_quotes_gpc 造成危險既風險
所以有必要禁用 register_globals 同 magic_quotes_gpc

不過... 普通網存既用戶係改唔到 php.ini 既 settings, 咁點搞?
用 .htaccess 就得
加兩句野入 .htaccess 就可以禁用 register_globals 同 magic_quotes_gpc[code]php_flag register_globals off
php_flag magic_quotes_gpc off[/code]我自己試過用[code]<pre>
<?
var_dump(ini_get('register_globals'));
var_dump(get_magic_quotes_gpc());
?>
</pre>[/code]係會得到
[quote]
FALSE
FALSE
[/quote]

不過如果你寫開程式... index.php?xxx=1 好鐘意寫 if($xxx == 1) 的話就喺你改好晒啲程式之前唔好用

而我都唔建議 Discuz! 用, 因為 Discuz! detect 到 magic_quotes_gpc 同埋 register_globals 係閂咗的話
就會自己 extract 晒 $_POST...$_GET 等 predefined variables, 或者自己用佢自己既 function daddslashes loop 佢既 variables, 咁樣會仲浪費系統資源

我試過有幾個程式就算關咗都會有好好既效果 ( Discuz! 唔計, 因為佢係自己 loop 同 extract )
[list]
[*]MediaWiki
[*]Drupal
[*]Joomla!
[*]Wordpress
[*]phpBB
[*]SMF
[/list]
[img]http://i.creativecommons.org/l/by-nc/3.0/88x31.png[/img] 此作品使用[url=http://creativecommons.org/licenses/by-nc/3.0/]創作共用姓名標示-非商業性 3.0 通用版發佈[/url]。

2008-1-20 16:20 青山
wordpress都有用呢兩個function:o (用左成個月都唔知...)

2008-1-20 16:31 ansonun
register_globals 及 magic_quotes_gpc

其實有咩用...

2008-1-20 16:53 bananasims
回覆 #2 青山 的帖子

佢地無利用呢個 function,....

[quote]原帖由 [i]ansonun[/i] 於 2008-1-20 16:31 發表 [url=http://www.alan888.com/Discuz/redirect.php?goto=findpost&pid=1154597&ptid=137181][img=13,13]http://www.alan888.com/Discuz/images/common/back.gif[/img][/url]
register_globals 及 magic_quotes_gpc
其實有咩用... [/quote]
register_globals 即係將全部 $_POST...$_GET....$_SERVER..$_ENV...$_SESSION... $_COOKIE... 等等既 variable extract 晒出黎
[url]http://hk2.php.net/extract[/url]

假如你打一個網址 index.php?xxxx=555&sss=666
如果開咗 register_globals, $xxxx 係等於 555, $sss 係等於 666, $_GET['xxxx'] 都係等於 555, $_GET['sss'] 都係等於 666
如果無開的話, 得 $_GET['xxxx'] 等於 555 同 $_GET['sss'] 等於 666, 其他如是

而 magic_quotes_gpc
magic_quotes_gpc 中既 gpc 係乜? GET, POST, COOKIE, 即係 $_GET, $_POST, $_COOKIE
呢三樣野用戶端都可以都可以變更, 所以要對呢三樣野做少少安全"手腳"
開咗 magic_quotes_gpc 之後, 佢會將 $_GET, $_POST, $_COOKIE 全部值既「'」同「"」前面加反斜「\」
本來原意係防止人地 SQL injection , 不過唔係人人都用 SQL... 咁樣會造成資源浪費.. 再攞資源去 stripslashes
你睇 Dz 個 daddslashes(), 呢個 function 係專為 GPC 三樣野加 slashes 而用, 當開咗 MagicQuotesGPC 之後, 佢唔會向個值加 slashes, 不過如果關咗的話就會

睇下:
[url]http://zh.wikipedia.org/wiki/PHP#.E5.B0.8DPHP.E7.9A.84.E6.89.B9.E8.A9.95[/url]

P.S. $_GET...$_POST 係 PHP 4.1 之前既野, 以前 $HTTP_GET_VARS ...$HTTP_POST_VARS 先得

2008-1-20 21:24 廢人一個
回覆 #4 bananasims 的帖子

如果關左既話 D Form 點算 ... !?
點 Get到 Form 入面 Input 既 Value .. ?

[[i] 本帖最後由 廢人一個 於 2008-8-25 13:31 編輯 [/i]]

2008-1-20 21:30 bananasims
回覆 #5 廢人一個 的帖子

用 $_GET, $_POST
$_GET, $_POST 一樣有效
只係佢唔會將啲 Variables extract 出黎

2008-1-20 21:33 kohong
[quote]原帖由 [i]bananasims[/i] 於 2008-1-20 21:30 發表 [url=http://www.alan888.com/Discuz/redirect.php?goto=findpost&pid=1154865&ptid=137181][img=13,13]http://www.alan888.com/Discuz/images/common/back.gif[/img][/url]
用 $_GET, $_POST
$_GET, $_POST 一樣有效
只係佢唔會將啲 Variables extract 出黎 [/quote]
:em21: :em21:  超級支持,  有時唔小心 d var 咁岩同form d名一樣....就會唔知點好 = =

2008-1-20 21:36 bananasims
我因為寫程式一樣野搞到我一定要剷除 register_globals
話說我 set $_SESSION['password'] = md5(***);
幾行之後我再另外 set 一個新 variable, $password = 'xx';
佢竟然同我將 $_SESSION['password'] 既值換埋=.=

2008-1-20 21:47 friri
原來Discuz!加左個function,難怪模似Discuz!寫action做到$xxx == 1....
非用Discuz!寫…無$_GET、$_POST就work唔到……

2008-1-20 21:59 bananasims
[code]
$magic_quotes_gpc = get_magic_quotes_gpc();
$register_globals = @ini_get('register_globals');

if(!$register_globals || !$magic_quotes_gpc) {
        @extract(daddslashes($_POST));
        @extract(daddslashes($_GET));
        if(!$magic_quotes_gpc) {
                $_FILES = daddslashes($_FILES);
        }
}[/code]
這堆

2008-1-20 22:05 friri
[quote]原帖由 [i]bananasims[/i] 於 2008-1-20 21:59 發表 [url=http://www.alan888.com/Discuz/redirect.php?goto=findpost&pid=1154894&ptid=137181][img=13,13]http://www.alan888.com/Discuz/images/common/back.gif[/img][/url]

$magic_quotes_gpc = get_magic_quotes_gpc();
$register_globals = @ini_get('register_globals');
if(!$register_globals || !$magic_quotes_gpc) {
        @extract(daddslashes($_POST));
        @extract(dadd ... [/quote]
我係學下學下咁寫下…之前試寫一個php用 xxx==1 …卻失敗 才知要用$_GET、$_POST.....
很好~抄了出來:em32:

2008-1-20 22:25 bananasims
PHP_VERSION 4.1 之後的話...試下 .htaccess 加
[code]
php_flag register_globals off
php_flag magic_quotes_gpc off[/code]

2008-1-20 23:52 CARO
關左會唔會對DZ!有影響?

2008-1-20 23:54 bananasims
回覆 #13 CARO 的帖子

有, 對 Dz 慢啲
對其他程式就會快啲

2008-1-22 00:00 CARO
回覆 #14 bananasims 的帖子

中 Point ...

2008-1-22 00:04 bananasims
回覆 #15 CARO 的帖子

Dz 用緊呢個特性

我今日無聊改下 php.ini 點知原來 PHP.net 建議使用
[code]
<?php
[/code]
而唔係
[code]
<?
[/code]

因為唔係個個 server 都會解析
[code]
<?
[/code]
而且 XML 係用
[code]
<?xml version="1.0" encoding="utf-8"?>
[/code]

2008-1-22 00:17 CARO
回覆 #16 bananasims 的帖子

一句起兩句止果D先用<? ... ?>,好似<?echo $x;?>咁...

但我相信好少SER仲係唔支援<? ... ?>:em16:

2008-1-22 13:05 bananasims
回覆 #17 CARO 的帖子

有 server 唔支援 <? ?>
所以要用 <?php=$xxx?>...

頁: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.