2017-03-28 40 views
0

もう一つの奇妙な質問がここにあります。私は最近、PHP 5からPHP 7.1への大幅なアップグレードと、CentOSのアップグレードも行っています。PHP 7.1 Register_Globals

コード内にレジスタのグローバルショートカットを使用したページがたくさんあります(ほとんどすべてが実際に使用されています)。

$_SESSION['username'] = $data['username']; 
$_SESSION['password'] = $data['password']; 
$_SESSION['accountid'] = $data['accountid']; 
$_SESSION['role'] = $data['role']; 

$getCompany = mysqli_query($mysqli_con,"SELECT * FROM companies WHERE companyid='$data[accountid]'"); 
$dataCompany = mysqli_fetch_array($getCompany); 

$delinquent = $dataCompany['delinquency']; 

// Here I fixed it 
$item = $_GET['item']; 
// But generally variables are just referenced by $whatevergetparameter 
if($delinquent == 0){ 
switch($item) 
{ 
    // Settings 
    case "cannedresponses": 
     include("/master/inc/settings/list-cannedresponse.inc"); 
    break; 

    case "serviceboard": 
     include("/master/inc/settings/list-serviceboard.inc"); 
    break; 

    case "pending-direct": 
     include("/master/inc/direct/pending.inc"); 
    break; 

これは当然、多くの問題を引き起こしています。特にそれはどこにでもあるので。

作業中に書き直す予定はありますが、その間に誰かがregister_globalsを真似て「有効」にする回避策を知っているかどうかは分かりませんでした。

私が見て、解決策を試してみた: http://php.net/manual/en/security.globals.php をしかし残念ながら、彼らは3年前に書かれたので、驚くべきことではないとする動作しません。

私のGoogleの-Fuがここでも私を助けていません:/

すべてのヘルプは高く評価され、感謝を事前に!

foreach (['_GET', '_POST', '_COOKIE'] as $source) { 
    foreach ($$source as $key => $value) { 
     $GLOBALS[$key] = $value; 
    } 
} 

免責事項:これまでに実際にこれをしないでください

+0

私はあなたがレジスタのグローバルを再びオンにすることはできないと思います。 PHP 7.1の唯一の選択肢は、書き換えを続けることです。率直に言って、私は、登録グローバルに依存していた生産ではアプリケーションを実行しません。 – mkaatman

+0

コード内に登録グローバル問題がありませんか? – hassan

+0

@mkaatmanここでの問題は、GETを追加して解決しました。私はそれをここで働かせるために追加しました。しかし、コードの多くは単に$ itemまたは$ serviceによって参照されます(register_globalsではget変数であると仮定する)。 –

答えて

0

私はその間に一時的な解決策を考え出しました。

私たちは、ほぼすべての私達のページの私たちはそこにどこでも使うGET/POST変数をリストアップし始め機能、DB接続など

を含むことをしばしば含んで利用しています。

if(isset($_GET["outsource"])) 
     $outsource = $_GET["outsource"]; 
else 
    $outsource = ""; 

// Our Selector for a lot of our Select case Usage 
if(isset($_GET["item"])) 
     $item = $_GET["item"]; 
else 
    $item = ""; 

// Order Stuff 
if(isset($_GET["orderby"])) 
     $orderby = $_GET["orderby"]; 
else 
    $orderby = ""; 

これは最もクリーンな解決策ではなく、最適な解決策ではありませんが「機能する」ものです。

+0

'foreach(['outsource'、 'item'、 'orderby']を$ var){$$ var = $ _GET [$ var] ?? ''; } ' –

+0

それはたくさんのクリーナーです!ありがとうございました。 –

1

あなたちょうどGPCから、独自のグローバルを作成することができます。

+0

ええと私はこれを解決策として見たことがありますが、セキュリティよりも安全です:) –

+1

register_globals *と* securityを持つことはできません。一つを選ぶ。 –