PHP () alternatif içerir?

6 Cevap php

Benim kod güvenli ve diğer güvenli alternatifler varsa harici dosyaları dahil etmek için bilmek istiyorum ..

Yani bu, benim kod örneği güvenli mi? Nasıl daha güvenli yapabilirsiniz? Teşekkürler!

<?php switch($_GET['p']){
   case 'test1':
      include 'test1.php';
      break;
   case 'test2':
      include 'test2.php';
      break;
   case 'test':
                echo 'something';
      include 'pages/test.php';
                echo 'something';
      break;
   default: 
      include 'main.php';
      break; 
} ?>

6 Cevap

Kod iyi. Dosya adları kodlanmış olarak yapıyorsun gibi şartlı dosyaları da dahil olmak üzere herhangi bir husus bulunmamaktadır. Dahil bir dosyanın kullanıcı bir un-ayıklanmış değerine dayalı olduğunda sorun oluşur. Ör

include $_GET['p'];

Kullanıcı (PHP ayarlarına bağlı olarak aynı zamanda diğer alanlardaki dosyaları içerebilir) istediği her içerebilir

Diğer seçenekler ne yapıyorsun üzerine varyasyonlar

require ve dosya mevcut değilse require_once başarısız olur. inlucde_once ve require_once dosyası yalnızca bir kez dahil, bu yüzden bu dosya başka yerde dahil edilmeyecektir programda inlucded olduğundan emin olun.

include_once 'myfile.php';
include_once 'myfile.php'; //does nothing as the file is already included

Eğer kullanım sınıfları varsa, autoloader seçeneği de var. Başvurunuzun görünüyor itibaren yeniden yapı olsa kullanmak mümkün olurdu.

Hatta anahtarı girmeden $_GET['p'] önce içeriğini inceleyerek düşünebilirsiniz. Özel karakterler, çöp veya başka bir şey varsa, programınız (sayfa işlemek için çalışırken zaman atık değil) olayı oturum isteyebilirsiniz.

En azından, bir güzel ve kibar bir sayfa sipariş olurdu "Üzgünüz, isteğiniz işleme olamazdı".

Bu hala p ilk etapta değerlendirilmesi anahtarı layık bir şey içerdiği şartıyla, anahtar ana sayfaya kadar düşmesini sağlar.

Ana sayfa işlemek amacıyla sorguları herhangi bir miktarda yaparsa, bu özellikle doğrudur. Er ya da geç, birisi URI yapısını fark ve onunla oynamak için eğlenceli olabileceğini karar verecektir, salak CPU döngülerini yakmak yok :)

Bu güvenli olmaz, neden yalnızca kodlanmış ettik bu dahil olarak görünce, ben görmüyorum. Bunlar olsa da harici dosyalar değil, ama ben ne demek istediğini anlıyorum. Dış farklı bir sunucuya anlamına gelecektir.

Sorunuza gelince, için tek alternatif include require, ancak mutlaka daha güvenli değil, sadece farklı çalışır.

Evet, tamamen güvenlidir.

Sen içeriğini biliyor ve dış kaynaklardan gelen değişkenlere dayalı yapmıyoruz dosyaları dahil ediyoruz. Bir alışkanlık dahil script yüklemek değil eğer size isterdi sonuç ise, başarısız seçim require('filename'); neden olur.

Aşağıdaki gibi, o daha okunabilir yapabilir:

$safeIncludes = array('test1', 'test2', 'test3');
$p = $_GET['p'];
if(in_array($p, $safeIncludes)) {
    $scriptName = $p . '.php';
    include($scriptName);
}

Başkaları gibi is güvenli dikkat çekmişlerdir onun dışında.

O ve switch ifadesi mantık net yapılmış gibi güvenlidir. Sadece daha güvenli belki sadece biraz daha güvenli hale getirmek için anahtar değişken veri kaynağını gizlemek için $ __POST kullanabilirsiniz yapmak. : D