|
|
|
|
|
для: FireTiger
(11.05.2007 в 11:18)
| | stripslashes() - это убрать обратный слэш
htmlspecialchars() - это для работы с html-oм
addslashes - добавить обратные слешы к апострофам
если не использовать htmlspecialchars() там где надо то написав к примеру в $_POST['title']
alert('Script dead'); а еще и по циклом.... но хорошего будет мало а если через htmlspecialchars() то выведит просто alert('Script dead'); дальше ltrim а почему не trim и справа и слева в полне удобно....
preg_replace("/[^a-z0-9]/i", "", ltrim($_POST['title']) - лучше если это определить через условие
к примеру
if(preg_match("/[^a-z0-9]/i", $_POST['title']){
Header("Location:переносим куда надо");
exit;
}
"/[^a-z0-9]/i" - i это чтение или действие над строкой т.е переводит все буквы и бла бла бла в нижний регистер тоже самое что у тебя a-z | |
|
|
|
|
|
|
|
для: Trianon
(17.05.2007 в 10:14)
| | А вообще, вот Вам мааааленькая задачка.
Нарисуйте форму с одним текстовым полем, в котором посетитель мог бы написать свое имя. Напишите обработчик, который бы записывал имя в таблицу БД, отвечал
Привет, имярек! Вы знаете, что в Вашем имени 6 символов?
Сегодня нас посетили:
|
(вместо слова имярек выводя имя посетителя) и дальше бы построчно выводил список накопленных посетителей из таблицы вместе с количеством посещений.
Пожалуй на этом примере большую часть "так называемых вопросов безопасности", решаемых указанными Вами функциями Вы сможете разобрать.
NB: имя может содержать абсолютно любые символы. | |
|
|
|
|
|
|
|
для: FireTiger
(16.05.2007 в 23:29)
| | >Ну так как? Можете подсказать что не так? Просто что-то не пойму, в чем здесь проблема...
>ltrim() - я использую для удаления пробелов с левой стороны слова.
А если эти пробелы нужны?
stripslashes() - использую для удаления обратных слэшей; насколько понимаю это для того чтобы не выполнялся perl скрипт;
Не зная, кто насовал в поле эти слэши?
А меж тем, stripslashes() далеко не все слэши удаляет.
Кто будет исполнять введенный текст, как perl-скрипт, где и зачем?
А если посетитель захочет показать другим посетителям текст perl-скрипта, ему что - удавиться прикажете?
>htmlspecialchars() - для запрета html-тегов, преобразовывает теги в их эквиваленты,
>например "<" в "<" и т.п. и вообще не выполняет любые скрипты а просто их выводит как обычный текст.
Эта операция требуется при выводе текста, но никак не при вводе.
при вводе она только мешает.
>Я чувствую что что-то не так со stripslashes(). Объясните пожалуйста!
Еще бы Вы чувствовали так. Про magic quotes прочли? | |
|
|
|
|
|
|
|
для: Trianon
(13.05.2007 в 11:07)
| | Ну так как? Можете подсказать что не так? Просто что-то не пойму, в чем здесь проблема... | |
|
|
|
|
|
|
|
для: FireTiger
(14.05.2007 в 16:56)
| | А если MySQL-иньекция, то нужна addslashes() или mysql_escape_string(). | |
|
|
|
|
|
|
|
для: Unkind
(12.05.2007 в 20:16)
| | Лично я предпочитаю:
<?php
$_GET['page'] = intval($_GET['page']);
?>
|
| |
|
|
|
|
|
|
|
для: FireTiger
(14.05.2007 в 16:56)
| | Я использовал в галерее изображений такое:
<?
//если ввели путь к несуществующему файлу
if($_FILES["logo"]["name"] != "" and $_FILES['logo']['size'] == "0")
{
echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='3; URL=http://". $_SERVER['HTTP_HOST'] ."/photo/add/'></HEAD></HTML>";
echo "<br /><center><strong>Нет у вас заявленной картинки на жестком диске</strong></center> <BR>";
$errors = 1;
exit ();
}
if($_FILES["logo"]["name"] != "" and $_FILES['logo']['size'] > "0")
{
// определяем допустимые расширения
$valid_types=array("gif","jpg","png","jpeg");
// определяем имя файла
$f_name = $_FILES['logo']['name'];
// Запоминаем размер файла
$f_size=$_FILES['logo']['size'];
// проверяем расширение файла
$ext = strtolower(substr($f_name, 1 + strrpos($f_name, ".")));
if (!in_array($ext, $valid_types))
{
$errors = "1";
echo "Имя загружаемого файла имеет некрасивое расширение";
exit ();
}
// недопускаем использование в имени файла более одной точки
$t4k = substr_count($f_name, ".");
if ($t4k > "1")
{
echo "<center><strong>Не допускается использование нескольких точек в имени файла...</strong></center> <BR>";
$errors = "1";
exit ();
}
// недопускаем использование в имени файла некрасивых дополнительных расширений
$mess="<center><strong>Имя файла должно иметь расширение изображения...</strong></center><br />";
if (preg_match("/\.php/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.html/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.htm/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.php3/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.shtml/i",$f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.cgi/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.pl/i", $f_name)) {echo $mess; $errors = 1; exit ();}
if (preg_match("/\.asp/i", $f_name)) {echo $mess; $errors = 1; exit ();}
// проверка веса файла
$max_size = "307200"; // допустимый вес - 300 килобайт
$f_kb_size=round($f_size/10.24)/100;
$f_size_max=round($max_size/10.24)/100;
if ($f_kb_size>$f_size_max)
{
$errors = 1;
echo "Превышено ограничение на вес файла";
exit ();
}
}
?>
|
Авось пригодится... | |
|
|
|
|
|
|
|
для: Trianon
(13.05.2007 в 11:07)
| | В книжку после вашего сообщения специально не смотрел чтобы проверить мое понимание этих функций.
ltrim() - я использую для удаления пробелов с левой стороны слова.
stripslashes() - использую для удаления обратных слэшей; насколько понимаю это для того чтобы не выполнялся perl скрипт;
htmlspecialchars() - для запрета html-тегов, преобразовывает теги в их эквиваленты, например "<" в "<" и т.п. и вообще не выполняет любые скрипты а просто их выводит как обычный текст.
Я чувствую что что-то не так со stripslashes(). Объясните пожалуйста! | |
|
|
|
|
|
|
|
для: FireTiger
(12.05.2007 в 23:29)
| | Думаю, что ничего, из того, что тут говорилось, Вы не поняли.
А теперь, прямыми словами (только собственными, а не из книжки) ответьте пожалуйста, что и зачем делает каждая из функций в Вашем коде
htmlspecialchars(stripslashes(ltrim(
| ? | |
|
|
|
|
|
|
|
для: Trianon (из кабака)
(12.05.2007 в 22:52)
| | Что ты имеешь ввиду? Можно прямыми словами? | |
|
|
|
|