risiko keamanan require_once 'app / Mage.php'; di root Magento

12

Saya memiliki file di root Magento saya yang require_once 'app/Mage.php';memberi saya akses ke Mage::getStoreConfigvariabel sistem.

Apakah ini menyebabkan risiko keamanan? Haruskah saya letakkan di folder lain?

Ini file saya, /twitter.php :

<?php
require_once 'app/Mage.php';
Mage::app();
$consumer_key = Mage::getStoreConfig("Social/twitterapi/consumer_key");
$consumer_secret = Mage::getStoreConfig("Social/twitterapi/consumer_secret");
$oauth_access_token = Mage::getStoreConfig("Social/twitterapi/access_token");
$oauth_access_token_secret = Mage::getStoreConfig("Social/twitterapi/access_token_secret");
Holly
sumber

Jawaban:

10

Kecuali jika skrip berisi sarana untuk mengubah konten dalam pemasangan Magento melalui sesuatu seperti argumen yang dikirim ke skrip maka tidak saya tidak melihat bahwa itu adalah risiko keamanan - termasuk Mage.phphanya apa yang index.php(juga di root web) juga.

Jonathan Hussey
sumber
Terima kasih @Jonathan Hussey, yang masuk akal, tidak mempertimbangkan yang index.phpmenggunakannya
Holly
8

Untuk menambahkan sedikit paranoia tambahan, Anda bisa mengubah pernyataan yang diperlukan untuk menentukan app/Mage.phpfile menggunakan jalur sistem file absolut, sehingga jalur menyertakan PHP tidak digunakan:

require __DIR__ . '/app/Mage.php';

Atau, pada versi PHP di bawah 5.3:

require dirname(__FILE__) . '/app/Mage.php';

The sangat teoritis vektor serangan adalah bahwa seorang penyerang mampu entah bagaimana memanipulasi PHP termasuk jalan dan dengan demikian dapat memasukkan arbitraty app/Mage.phpfile.

Vinai
sumber
3

Jika Anda adalah satu-satunya yang akan mengakses file ini, mengapa tidak membatasi IP if($_SERVER['REMOTE_ADDR']=='your.ip.address.here')? Saya telah melihat banyak pengembang magento yang menyimpan jenis file seperti itu di root Magento dan melakukan hal-hal yang berkaitan dengan admin tanpa jenis otentikasi. Sebagai contoh, saya pergi ke salah satu situs web teman saya Magento dan hanya menebak file http://example.com/test.phpdan itu memberi saya hasil Mail sent!lol. Pengembang juga menulis hal-hal sensitif untuk mengubah beberapa tabel database dalam skrip mandiri karena mereka ingin melakukannya sesekali, dan tidak ingin membuat modul untuk itu.

Saya akan menyarankan siapa saja yang membuat jenis file mandiri yang hanya diperlukan untuk mereka, cukup IP-batasi saja, dan begitu pekerjaan Anda selesai pada file itu, cukup taruh exit;di atas file. Hanya 2 sen saya.

Kalpesh
sumber
1

Creed Bratton, Akan selalu berisiko memanggil kode jenis ini. Karena Anda memanggil Mage.php dari twitter.php, Anda perlu melakukannya put proper file permission for twitter.php. Atau pengguna lain dapat menulis ulang kode twitter.php Anda.Other wise it does not create any issue.

Amit Bera
sumber
Izin file standar 644 untuk file ini harus baik-baik saja. Ingat juga bahwa file PHP hanya perlu izin baca untuk pengguna server web jadi jika Anda memang ingin memanfaatkan ini untuk membatasi pengeditan file untuk alasan apa pun maka Anda bisa.
Jonathan Hussey
Terima kasih @JonathanHussey ... atas saran Anda
Amit Bera
2
Mengapa .. saya turun suara .. Dapat menjelaskan
Amit Bera
Aku benci ketika mereka tidak menjelaskan suara turun.
siklus 21
Ini memerlukan beberapa klarifikasi, dapat dengan mudah disalahpahami: 1) "pengguna" dalam konteks ini berarti pengguna di server, yaitu seseorang yang sudah memiliki akses ke server. 2) ini sama sekali tidak terkait dengan fakta bahwa file tersebut termasuk Mage.php. Jika seseorang memiliki akses ke server Anda dan dapat menulis file, ia dapat menambahkan kode dalam file apa pun (atau membuat yang baru misalnya di / media, yang sering diatur ke 777)
Fabian Schmengler