2011-01-24 2 views
1

Я планирую регистрировать все PHP $_SERVER variables, которые не являются статическими по всем запросам (например, SERVER_SIGNATURE), в таблицу базы данных. У меня есть два вопроса:Запись переменных PHP SERVER в базу данных

1) Существует ли максимальная длина полей, таких как HTTP_ACCEPT и т. Д.? Я использую следующую структуру. Это не оптимизировано и не самое лучшее, но только начальное указание. Любые ссылки на то, где я могу найти максимальные длины для некоторых/всех переменных, будут полезны.

2) Разве целесообразно хранить PHP_AUTH_USER и PHP_AUTH_PW? Может ли это привести к проблемам безопасности? С другой стороны, могут ли эти поля когда-либо быть отдаленно полезными при анализе трафика?

Примечание:

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

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

Соответствующая часть таблицы выглядит следующим образом:

`PHP_SELF` varchar(1024) NOT NULL, 
`SERVER_PROTOCOL` varchar(128) NOT NULL, 
`REQUEST_METHOD` varchar(128) NOT NULL, 
`REQUEST_TIME` timestamp NOT NULL, 
`QUERY_STRING` varchar(4096) NOT NULL, 
`DOCUMENT_ROOT` varchar(512) NOT NULL, 
`HTTP_ACCEPT` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_CHARSET` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_ENCODING` varchar(2048) NOT NULL, 
`HTTP_ACCEPT_LANGUAGE` varchar(2048) NOT NULL, 
`HTTP_CONNECTION` varchar(1024) NOT NULL, 
`HTTP_HOST` varchar(1024) NOT NULL, 
`HTTP_REFERER` varchar(4096) NOT NULL, 
`HTTP_USER_AGENT` varchar(4096) NOT NULL, 
`HTTPS` varchar(128) NOT NULL, 
`REMOTE_ADDR` varchar(64) NOT NULL, 
`REMOTE_PORT` varchar(128) NOT NULL, 
`SCRIPT_FILENAME` varchar(512) NOT NULL, 
`SERVER_PORT` varchar(128) NOT NULL, 
`SCRIPT_NAME` varchar(512) NOT NULL, 
`REQUEST_URI` varchar(4096) NOT NULL, 
`PHP_AUTH_DIGEST` varchar(512) NOT NULL, 
`PHP_AUTH_USER` varchar(512) NOT NULL, 
`PHP_AUTH_PW` varchar(512) NOT NULL, 
`AUTH_TYPE` varchar(512) NOT NULL, 
`PATH_INFO` varchar(4096) NOT NULL, 
`ORIG_PATH_INFO` varchar(4096) NOT NULL, 
+0

Какова цель всего этого ведения журнала? –

+0

@Col. Шрапнель: Несмотря на ваши предыдущие советы, я все время трачу время на все это :).Честно говоря, я еще не разработал комплексное решение для ведения журнала, которое будет моим (не аналитиком google и т. Д.), Не будет использовать Disk I/O вообще (по крайней мере, не во время обслуживания запроса - я хочу, чтобы регистрация выполняется как низкоприоритетный процесс после подачи запроса) и что-то, что я могу проанализировать, используя свои собственные алгоритмы, когда придет время. –

+0

Итак, вы еще не знаете. Я боюсь, что ответить на ваш вопрос невозможно тогда. –

ответ

0

Общепринятым максимальной длины (в де-факто использования в Apache HTTPD, например) для данного заголовка 8k. (8192 bytes)

Проблемы с безопасностью хранения этих данных будут такими же, как и хранение любых данных, предоставленных пользователем. Используйте привязку параметров (например, предложенную PDO). Не просто рассчитывайте на побег строк.

В вашей схеме базы данных есть другие соображения производительности. Возможно, вы захотите изменить столбцы на тип TEXT из-за this:

() Каждая таблица (независимо от механизма хранения) имеет максимальный размер строки 65 535 байт. [...] столбцы BLOB и TEXT подсчитываются в [9-12 ] байт на столбец в сторону предельного размера строки, так как содержимое этих столбцов хранятся отдельно от остальной части строки)

+0

, вы можете также рассмотреть ориентированное на документ «NoSQL» решение для регистрации такого рода данных из-за схемы (думаю, CouchDB/MongoDB), но это выходит за рамки этого вопроса, я думаю. :) –

+0

Спасибо за приятную информацию. Я предполагаю, что 8K - общая длина заголовка? Это, возможно, не даст хорошего представления об отдельных полях. Что касается данных, предоставленных пользователем - я имею в виду, что это нарушение безопасности учетных данных пользователя? Являются ли эти незашифрованные пароли? И, наконец, после прочтения вашей ссылки, я изменю типы на текст. –

0

2) разумно ли хранить PHP_AUTH_USER и PHP_AUTH_PW? Может ли это привести к проблемам безопасности ? С другой стороны, могут ли эти поля когда-либо быть удаленно полезны при анализе трафика?

Я предлагаю не хранить PHP_AUTH_PW?, за исключением анализа паролей пользователей для личных предпочтений, это никоим образом не поможет. НО может возникнуть большая проблема, если кто-то узнает, что вы сохраняете данные такого типа (в случае, если вам не разрешено (что может быть)), или если другой получает доступ к вашей базе данных так или иначе, и использует эти пользовательские/pwds для доступа к учетным записям.

PHP_AUTH_USER может иметь значение. И сохранение имени пользователя только для пользователей не создает проблемы безопасности.

+0

Спасибо. Это очень решает мое сомнение в отношении пункта 2. И вы правильно поняли мое намерение - я думал * возможно, я мог бы проанализировать личные предпочтения таким образом, но я думаю, что это рискованно. –

Смежные вопросы