Санитарная обработка PHPSESSID - PullRequest
       1

Санитарная обработка PHPSESSID

8 голосов
/ 17 сентября 2010

Я передаю PHPSESSID на страницу PHP (через POST), и мне было интересно, каков наилучший способ очистки входных данных.mysql_real_escape_string будет достаточно?Есть ли что-то особенное, что я должен учитывать при работе с идентификаторами сессий (я имею в виду, что они могут быть только буквами и цифрами, верно?)действительно хочу знать: если кто-то подделает данные POST, сможет ли он отправить вредоносную строку в виде PHPSESSID, которая сделает что-то неприятное, когда я позвоню session_id($_GET['PHPSESSID'])?Лично я не могу думать ни о чем, но лучше, чем потом сожалеть ...

Спасибо

Нико

Ответы [ 3 ]

7 голосов
/ 17 сентября 2010

Хорошее мышление, но, насколько я вижу, нет необходимости дезинфицировать этот вход. PHPSESSID будет передан в session_id().

session_id действительно имеет некоторые ограничения:

В зависимости от обработчика сеанса, не все символы допускаются в идентификаторе сеанса. Например, обработчик файлового сеанса допускает только символы в диапазоне a-z A-Z 0-9, (запятая) и - (минус)!

Но session_id() должен учитывать отклонения от этих правил с сообщением об ошибке. (Возможно, вы захотите перехватить это сообщение об ошибке и завершить работу сценария при ошибке.)

Единственная реальная опасность, которую я вижу, это когда вы используете пользовательский обработчик сеанса, например, подключается к базе данных. В этом случае вам придется очистить входные данные, например, используя mysql_real_escape_string(). Однако это то, что должно происходить внутри пользовательского обработчика сеанса.

Само собой разумеется, что если вы используете идентификатор сеанса в каком-либо другом контексте, скажем, в качестве параметра в форме HTML, вам необходимо принять санитарные меры, необходимые для этого конкретного вывода (в этом случае htmlspecialchars()) .

2 голосов
/ 17 сентября 2010

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

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

1 голос
/ 17 сентября 2010

Достаточно ли mysql_real_escape_string?

Неправильно. Вы всегда должны очищать данные, используя соответствующий метод, в место, в которое вы записываете значение. Вы бы использовали mysql_real_escape_string () только если / когда вы записываете значение в базу данных MySQL.

Из вашего комментария не ясно, что именно вы делаете. Вы имеете в виду, что вы используете curl в PHP для создания POST? Если это так, то никакой очистки не требуется (не совсем верно - но curl делает это за вас), если вы передаете CURLOPT_POSTFIELDS в виде массива - но вам необходимо urlencode значения, если вы передаете CURLOPT_POSTFIELDS в виде строки.

Вы записываете значение в браузер, чтобы пользователь мог передать значение? В этом случае вы бы использовали htmlentities (), чтобы записать значение в поле формы.

Что-то еще?

...