php проверить правильность имени файла

PHP Формы — Проверка имени, E-mail и URL

В данной статье, мы рассмотрим возможности PHP проверить, корректно ли в форме указан адрес электронной почты (email), имя пользователя и URL-адрес.

Проверка валидности имени на PHP

Но что если нужно, чтобы имя было ТОЛЬКО на латинице или ТОЛЬКО на кирилице и ограничить длину до 30 символов? Например, для полных имён типа «Максим Максимов-Суханов» или «Maxim Maximov-Sukhanov», естественно только на одном из языков регулярное выражение примет следующий вид (бонусом можно писать украинские имена):

или более строгий вариант выражения без прочих символов и в котором первая буква строки должна быть в верхнем регистре, а все остальные в нижнем:

Примечание: Не забывайте про букву «Ё», которая не входит в диапазон «А-Я» и её нужно указывать отдельно!

Проверка правильности email на PHP

Как известно email состоит из двух основных частей — username@hostname. Локальная часть email-адреса — это то, что перед знаком «@»(ASCII-код 64), а часть после знака — это домен получателя. Локальная часть может иметь длину до 64 символов, а имя домена может содержать не более 253 символов.

Реализуем проверку email разложив её на сосотавляющие, алгоритм которых следует предписаниям стандарта RFC 2822:

Данная регулярка удобна тем, что шаблоны для разных частей формата email-адреса объявляются отдельно. Валидацию пройдут email не только с буквенными именами почтового домена, но и почтовым сервером, представленным в виде ip адреса.

Главный минус этой регулярного выражения в том, что его нужно постоянно корректировать в соответствие изменениям в названиях email-адресов. Например, домены с русскими именами в зоне «.рф» регулярка выше уже не пропустит.

Рекомендуем использовать именно этот способ проверки email-адреса, так как сегодня и в будущем вы будете уверены, что она работает как нужно. Разработчики языка PHP сами внесут нужные корректировки в новых версиях.

Проверка URL-адреса в PHP

Проверка имени, email и URL-адреса в PHP

Объединим все рассмотренные выше все проверки полей ввода в одной форме и напишем следующий код:

Пример

Вы можете попытаться ввести корректные и некорректные данные в представленной выше форме и посмотреть работу, написанного в этом уроке, сценария PHP.

В следующем уроке мы выведем введенные пользователем данные на экран.

Источник

Работа с файлами на php: открытие, запись, чтение

На самом деле, чем открыть php файл, не является большой проблемой. Бывает труднее открыть бутылку пива, когда находишься посреди леса. Но так думают лишь заядлые программисты. А для новичков поведаем обо всех возможностях php для работы с файлами:

Файлы php

Файлы с расширением php содержат в себе код написанный, на одноименном языке программирования. В отличие от других языков, php является серверным языком программирования. То есть он выполняется на стороне сервера. Поэтому для отладки его кода на клиентской машине должен быть установлен локальный сервер.

Для работы с файлами php используются специальные приложения – программные редакторы. Наиболее распространенными из них являются:

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Открытие и закрытие файлов

В php все операции с файлами осуществляются в несколько этапов:

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Чтение и запись файлов

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Для работы с функцией требуется открытие и закрытие файла. Пример:

Результат аналогичен предыдущему.

Функции для работы с файлами в php позволяют считывать содержимое построчно и посимвольно:

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Для записи текстовых данных в файл существует две идентичные функции:

Функции записывают в файл int file строку string string указанной длины int length ( необязательный аргумент ). Пример:

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Создание и удаление файлов

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Получение информации о файле

Для получения информации о файлах в php используется целый ряд функций:

php проверить правильность имени файла. Смотреть фото php проверить правильность имени файла. Смотреть картинку php проверить правильность имени файла. Картинка про php проверить правильность имени файла. Фото php проверить правильность имени файла

Источник

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

fnmatch — Проверяет совпадение имени файла с шаблоном

Описание

Список параметров

Шаблон подстановки оболочки операционной системы.

Проверяемая строка. Данная функция особенно полезна для имен файлов, но также может быть использована с обычными строками.

Значением параметра flags может быть любая комбинация следующих флагов, объединенных с помощью бинарного оператора ИЛИ (|).

Перечень возможных флагов для функции fnmatch()

FlagОписание
FNM_NOESCAPEОтключить экранирование обратных слешей.
FNM_PATHNAMEСлеш в строке совпадает только со слешем в указанном шаблоне.
FNM_PERIODВедущая точка в строке должна точно совпадать с точкой в указанном шаблоне.
FNM_CASEFOLDСовпадение без учета регистра. Является частью расширения GNU.

Возвращаемые значения

Список изменений

ВерсияОписание
5.3.0Данная функция стала доступной на платформе Windows.

Примеры

Пример #1 Проверяет соответствие цвета шаблону подстановки

Примечания

На данный момент эта функция недоступна на POSIX-несовместимых системах, исключая Windows.

Смотрите также

Источник

Фильтрация и проверка данных PHP. Частые ошибки

Материал предназначен в основном для начинающих веб-программистов.

Введение.

Часто ко мне обращаются клиенты, у которых установлены самописные CMS или модули, написанные начинающими веб-программистами, которые не понимают, что нужно для защиты данных и зачастую копируют функции фильтрации, не задумываясь о том как они работают и что именно нужно с ними делать.

Здесь я постараюсь описать как можно подробнее частые ошибки при фильтрации данных в PHP скрипте и дать простые советы как правильно выполнить фильтрацию данных.

В сети много статей по поводу фильтрации данных, но они как правильно не полные и без подробные примеров.

Разбор полетов.

Фильтрация. Ошибка №1

Для числовых переменных используется такая проверка:

Почему она приведет к SQL инъекции? Дело в том, что пользователь может указать в переменной input_number значение:

В таком случаи проверка будет успешно пройдена, т.к. функция intval получает целочисленное значение переменной, т.е. 1, но в самой переменной $number ничего не изменилось, поэтому весь вредоносный код будет передан в SQL запрос.
Правильная фильтрация:

Конечно, условие может меняться, например если вам нужно получить только определенный диапазон:

Если вы используете чекбоксы или мультиселекты с числовыми значениями, выполните такую проверку:

array_map
Так же встречаю фильтрацию в виде:

Ничего кроме улыбки это не может вызвать 🙂

Фильтрация. Ошибка №2.

Для стринг-переменных используется такая фильтрация:

Функция addslashes экранирует спец. символы, но она не учитывает кодировку БД и возможен обход фильтрации. Не стану копировать текст автора, который описал данную уязвимость и дам просто ссылку Chris Shiflett (перевод можно поискать в рунете).

Если вы не предполагаете вхождение html тегов, то лучше всего сделать такую фильтрацию:

strip_tags — убирает html теги.
htmlspecialchars — преобразует спец. символы в html сущности.
Так вы защитите себя от XSS атаки, помимо SQL инъекции.
Если же вам нужны html теги, но только как для вывода исходного кода, то достаточно использовать:

Если вам важно, чтобы значение переменной не было пустой, то используйте функцию trim, пример:

Фильтрация. Ошибка №3.

Она касается поиска в БД.
Для поиска по числам используйте фильтрацию, описанную в первой ошибке.
Для поиска по тексту используйте фильтрацию, описанную во второй ошибке, но с оговорками.
Для того, чтобы пользователь не смог выполнить логическую ошибку, нужно удалять или экранировать спец. символы SQL.
Пример без доп. обработки строки:

На выходе у нас получится запрос вида:

Это значительно увеличит нагрузку на базу.
В своём скрипте я использую функцию, которая удаляет нежелательные мне символы из поиска:

Конечно, не все из выше перечисленных символов представляют опасность, но в моём случаи они не нужны, поэтому выполняю поиск и замену.
Пример использования фильтрации:

Также советую сделать ограничение по количеству символов в поиске, хотя бы не меньше 3-х, т.к. если у вас будет большое количество записей в базе, то поиск по 1-2 символам будет значительно увеличивать нагрузку на БД.

Фильтрация. Ошибка №4.

Не фильтруются значения в переменной $_COOKIE. Некоторые думаю, что раз эту переменную нельзя передать через форму, то это гарантия безопасности.
Данную переменную очень легко подделать любым браузером, отредактировав куки сайта.
Например, в одной известной CMS была проверка, используемого шаблона сайта:

В данном случаи можно подменить значение переменной $_COOKIE[‘skin’] и вызвать ошибку, в результате которой вы увидите абсолютный путь до папки сайта.
Если вы используете значение куков для сохранения в базу, то используйте одну из выше описанных фильтраций, тоже касается и переменной $_SERVER.

Фильтрация. Ошибка №5.

В PHP скрипте переменная $group будет равна 5, если в скрипте она не была объявлена со значением по умолчанию.

Фильтрация. Ошибка №6.
Проверка. Ошибка №1.

Сталкивался со случаями, когда для AJAX запроса (например: повышение репутации) передавалось имя пользователя или его ID (кому повышается репутация), но в самом PHP не было проверки на существование такого пользователя.
Например:

Получается мы создаем запись в базе, которая совершенно бесполезна нам.

Проверка. Ошибка №2.

При выполнении различного рода действий (добавление, редактирование, удаление) с данными не забывайте проверять права пользователя на доступ к данной функции и дополнительные возможности (использование html тегов или возможность опубликовать материал без проверки).

Давно исправлял в одном модуле форума подобную ошибку, когда любой пользователь мог отредактировать сообщение администрации.

Проверка. Ошибка №3.

При использовании нескольких php файлов сделайте простую проверку.
В файле index.php (или в любом другом главном файле) напишите такую строчку перед подключением других php файлов:

В начале других php файлов напишите:

Так вы ограничите доступ к файлам.

Проверка. Ошибка №4.

Используйте хеши для пользователей. Это поможет предотвратить вызов той или иной функции путём XSS.
Пример составления хеша для пользователей:

Далее во все важные формы подставляйте инпут со значением текущего хеша пользователя:

Во время выполнения скрипта осуществляйте проверку:

Проверка. Ошибка №5.

При выводе SQL ошибок сделайте простое ограничение к доступу информации. Например задайте пароль для GET переменной:

Это позволит скрыть от хакера информацию, которая может ему помочь во взломе сайта.

Проверка. Ошибка №5.

Старайтесь не подключать файлы, получая имена файлов извне.
Например:

В таком случаи вы предотвратите подключение файлов, которые не были вами предусмотрены.

Совет.

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

UPD: Поправил пост. Перенес все советы по поводу функций и переменных, которые были в комментариях.

Источник

Как проверить загруженный тип файла в PHP

я использовал этот код для проверки типа изображений,

но некоторые пользователи жалуются, что они получают ошибку при загрузке любого типа изображений, в то время как некоторые другие не получают никаких ошибок!

мне было интересно, устраняет ли это проблему:

if (mime_content_type($_FILES[‘fupload’][‘type’]) == «image/gif»)<.

8 ответов

кроме того, finfo функции отлично, если ваш сервер поддерживает их.

В дополнение к @deceze, вы можете также finfo() чтобы проверить MIME-тип файлов без изображений:

конечно, вы можете проверить, является ли это изображение с exif, но лучший способ, я думаю, это сделать с finfo так:

лучший способ, на мой взгляд, сначала использовать getimagesize() следовал по imagecreatefromstring().

проверка getimagesize() предотвращает некоторые DoS-атаки, потому что нам не нужно пытаться imagecreatefromstring() из каждого файла, предоставленного пользователем, либо файл без изображения или файл слишком большой. К сожалению, согласно PHP docs нельзя полагаться на проверку содержимого типа изображения.

на imagecreatefromstring() наконец пытается открыть файл как образ-если это удается-у нас есть образ.

в PHP 5.5 я использую эту функцию для получения типа файла и проверки изображения:

затем вы могли бы сделать:

Это просто один сценарий, который я часто использую.

в основном я использую mime_content_type (), чтобы получить что-то вроде «image/jpg», а затем взрываю его на «/» и проверяю первый элемент массива, чтобы увидеть, говорит ли он «image».

надеюсь, это сработает!

эта последняя строка близка. Вы можете использовать: if (mime_content_type($_FILES[‘fupload’][‘tmp_name’]) == «image/gif»)<.

предупреждение: следующий ответ фактически не проверяет тип файла. Он только проверяет имя. Это не подходит для фактических целей безопасности.

EDIT: не используйте этот метод поскольку он не служит для проверки безопасности. Я оставляю этот ответ здесь, чтобы никто не сделал такую же ошибку, как я, попробовав это.

я попробовал следующее, И это сработало для меня:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *