Самый легкий метод должен использовать sys.path.append ().
Однако можно также интересоваться импорт модуль. Это обеспечивает доступ к внутренним функциям импорта.
# mod_name is the filename without the .py/.pyc extention
py_mod = imp.load_source(mod_name,filename_path) # Loads .py file
py_mod = imp.load_compiled(mod_name,filename_path) # Loads .pyc file
Это может привыкнуть к загрузочным модулям динамично, когда Вы не знаете имя модуля.
я использовал это в прошлом для создания сменного интерфейса типа к приложению, где пользователь записал бы сценарий со специализированными функциями, и просто отбросить их сценарий в определенном каталоге.
кроме того, эти функции могут быть полезными:
imp.find_module(name[, path])
imp.load_module(name, file, pathname, description)
Чтобы понять, как сделать ваш сеанс безопасным, вы должны сначала понять, как работают сеансы.
Давайте посмотрим на этот фрагмент кода:
session_start();
Как только вы его вызовете, PHP будет искать файл cookie с именем PHPSESSID
(по умолчанию). Если он не найден, он создаст его:
PHPSESSID=h8p6eoh3djplmnum2f696e4vq3
Если он найден, он принимает значение PHPSESSID
, а затем загружает соответствующий сеанс. Это значение называется session_id
.
Это единственное, что будет знать клиент. Все, что вы добавляете в переменную сеанса, остается на сервере и никогда не передается клиенту. Эта переменная не t изменится, если вы измените содержимое $ _ SESSION
. Он всегда остается неизменным, пока вы его не уничтожите или не истечет время ожидания. Следовательно, бесполезно пытаться скрыть содержимое $ _ SESSION
путем хеширования или другими способами, так как клиент никогда не получает и не отправляет эту информацию.
Затем, в случае нового сеанса, вы зададите переменные:
$_SESSION['user'] = 'someuser';
Клиент никогда не увидит эту информацию.
Проблема безопасности может возникнуть, когда злоумышленник украдет session_id
другого пользователя. Без какой-либо проверки он сможет выдать себя за этого пользователя. Нам нужно найти способ однозначно идентифицировать клиента (а не пользователя).
Одна из стратегий (наиболее эффективная) включает проверку того, совпадает ли IP-адрес клиента, запустившего сеанс, с IP-адресом человека, использующего сеанс.
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
// The Check on subsequent load
if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
die('Session MAY have been hijacked');
}
Проблема с этой стратегией заключается в том, что если клиент использует балансировщик нагрузки или (при длительном сеансе) у пользователя есть динамический IP-адрес, это вызовет ложное предупреждение.
Другая стратегия включает проверку пользователя: агент клиента:
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['agent'] = $_SERVER['HTTP_USER_AGENT'];
}
// The Check on subsequent load
if($_SESSION['agent'] != $_SERVER['HTTP_USER_AGENT']) {
die('Session MAY have been hijacked');
}
Обратной стороной этой стратегии является то, что если клиент обновит свой браузер или установит надстройку (некоторые добавляют к пользовательскому агенту), строка пользовательского агента изменится, и это вызовет ложное предупреждение.
Другая стратегия состоит в том, чтобы менять session_id
на каждые 5 запросов. Таким образом, session_id
теоретически не остается достаточно долго, чтобы быть взломанным.
if(logging_in()) {
$_SESSION['user'] = 'someuser';
$_SESSION['count'] = 5;
}
// The Check on subsequent load
if(($_SESSION['count'] -= 1) == 0) {
session_regenerate_id();
$_SESSION['count'] = 5;
}
Вы можете комбинировать каждую из этих стратегий по своему усмотрению, но вы также объедините и обратные стороны.
К сожалению, нет решение является надежным. Если ваш session_id
скомпрометирован, с вами почти все кончено.
Вы можете сохранить IP-адрес, подпись браузера и т. Д. Для идентификации пользователя. При каждом запросе сверяйте его с текущими значениями, чтобы увидеть, не произошло ли что-нибудь подозрительное.
Имейте в виду, что некоторые люди стоят за поставщиками, которые используют абсолютно динамические IP-адреса, поэтому эти люди могут часто выходить из системы.
Вы можете украсть сеансы с помощью javascript (XSS-> кросс-сайд-атака) .. Вы всегда должны использовать соленый хеш MD5 для защиты сеанса.
Чтобы избежать перехвата сеанса, вы также должны поместить в хеш пользовательский агент
$ _ SERVER ['HTTP_USER_AGENT']
.
В вашем примере:
$_SESSION['logged_in'] = 1;
$_SESSION['username'] = $username; // user's name
$_SESSION['hash'] = md5($YOUR_SALT.$username.$_SERVER['HTTP_USER_AGENT']); // user's name hashed to avoid manipulation
Перед использованием сеанса , убедитесь, что он использует правильный хэш:
if (!$_SESSION['hash']==md5($YOUR_SALT.$username.$_SERVER['HTTP_USER_AGENT'])){
die ('session hash not corrected')
}
Думаю, второй должен быть 'logged_in'?
Некоторые ресурсы, касающиеся безопасности сеанса:
Вы можете найти руководство по безопасности сеанса в PHP здесь .
Это обычный код входа в систему, можно внести некоторые улучшения, чтобы его было труднее взломать. Во-первых, вы можете выполнить контрольную сумму с именем пользователя и временем входа в систему или, альтернативно, с заранее определенной строкой (или солью), и сохранить ее в сеансе и сравнить ее.
Итак, когда пользователь входит в систему:
// not the most secure hash!
$_SESSION['checksum'] = md5($_SESSION['username'].$salt);
И перед входом в конфиденциальную область:
if (md5($_SESSION['username'].$salt) != $_SESSION['checksum'])
{
handleSessionError();
}
По умолчанию сеансы часто хранятся в виде файлов на стороне сервера, и в браузер пользователя помещается файл cookie, чтобы запомнить, на какой файл следует ссылаться. Когда дело доходит до взлома сеанса, хакер каким-то образом извлекает достаточно информации, чтобы дублировать вход в систему или ему удалось изменить данные сеанса, используя информацию из файла cookie.
Вы можете закодировать собственную обработку сеанса, используя базы данных для дополнительной безопасности. Некоторые более строгие CMS, такие как Joomla, также регистрируют IP. Однако это вызывает проблемы у людей, пользующихся определенным интернет-провайдером
Это смешно.
Захват сеанса происходит, когда (обычно с помощью межсайтовой атаки сценариев) кто-то перехватывает ваш sessionId (который является файлом cookie, автоматически отправляемым браузером на веб-сервер).
Кто-то опубликовал это, например:
Итак, когда пользователь входит в систему:
// не самый безопасный хеш! $ _SESSION ['контрольная сумма'] = md5 ($ _ SESSION ['username']. $ salt);
И перед входом в конфиденциальную область:
if (md5 ($ _ SESSION ['username']. $ salt) ! = $ _SESSION ['контрольная сумма']) {
handleSessionError (); }
Давайте разберемся, что не так с этой
$ _ SESSION ['logged_in'] = 1; $ _SESSION ['имя пользователя'] = $ имя пользователя; // имя пользователя $ _SESSION ['hash'] = md5 ($ YOUR_SALT. $ Username. $ _ SERVER ['HTTP_USER_AGENT']);
// имя пользователя хешируется, чтобы избежать манипуляции
Кто избегает манипуляций? волшебный сеанс фейри? Ваши переменные сеанса не будут изменены, если ваш сервер не будет скомпрометирован. Хеш действительно нужен только для того, чтобы красиво сжать вашу строку до 48-символьной строки (пользовательские агенты могут быть немного длинными).
По крайней мере, однако сейчас мы проверяем некоторые данные клиентов, вместо того, чтобы проверять данные SESSION to SESSION, они проверили HTTP_USER_AGENT (который является строкой, идентифицирующей браузер), этого, вероятно, будет более чем достаточно для защиты вас, но вы должны понимать, что если человек каким-то образом уже взял ваш sessionId, есть вероятность, что вы также отправили запрос на сервер плохих парней и дали плохому парню свой пользовательский агент, поэтому умный хакер может подделать ваш пользовательский агент и победить эту защиту .
Вот и вы попали в печальную правду.
Как только ваш идентификатор сеанса будет скомпрометирован, вы уйдете. Вы можете проверить удаленный адрес запроса и убедиться, что он остается неизменным во всех запросах (как это сделал я), и это будет отлично работать для 99% вашей клиентской базы. Затем однажды вам позвонит пользователь, который использует сеть с прокси-серверами с балансировкой нагрузки, запросы будут исходить отсюда через группу разных IP-адресов (иногда даже в неправильной сети), и он потеряет свой сеанс слева направо и в центре.
запросы будут приходить отсюда через группу разных IP-адресов (иногда даже в неправильной сети), и он будет терять сеанс слева направо и по центру. запросы будут приходить отсюда через группу разных IP-адресов (иногда даже в неправильной сети), и он будет терять сеанс слева направо и по центру.Чтобы предотвратить фиксацию сеанса, которая заключается в угадывании SID или его краже с использованием различных методов. Независимо от того, насколько сложна логика вашей сессии, она определенно будет в некоторой степени уязвима для систематического воровства. Вот почему вам нужно восстанавливать идентификатор каждый раз, когда вы делаете что-то важное. Например, если вы собираетесь опубликовать сообщение или изменить настройку в админке, сначала запустите session-redurate-id. Затем хакеру придется снова пройти через процесс взлома. По сути, это дает хакеру единовременный шанс получить идентификатор за все потраченное время.
http://us.php.net/manual/en/function.session-regenerate-id.php
Или вы можете менять идентификатор каждый раз
if ($ _ SESSION ['counter'] == 3) {session_regenerate_id (); $ _ SESSION ['counter'] == 0}
Также $ _SERVER [' HTTP_USER_AGENT '] не очень надежен. Старайтесь избегать этого не только по этой причине, но и потому, что это удобно для хакеров, так как они знают, что для этого широко используются агенты. Вместо этого попробуйте использовать $ _SESSION ['id_token'] = sha1 (какая-то сумасшедшая информация, такая как файловая память, имя файла, время).
Когда я столкнулся с этой проблемой при создании SugarCRM, я отслеживал и проверял IP-адрес пользователя (в дополнение к некоторым другим вещам). Я сравнил только первые три раздела IP-адреса. Это позволило использовать большинство локально переменных IP-адресов. Я также сделал возможным отключение проверки IP-адреса для установок, где часто использовались основные вариации IP-адреса. Я думаю, что только сравнение начала IP-адреса поможет вам с безопасностью, не добавляя таких серьезных ограничений к вашему приложению.
Пример: "###. ###. ### .---" Будет проверена только часть IP-адреса, отмеченная знаком «#».
192.168.1.101
192.168.1.102
192.168.1.XXX
Все считаются равными.
Джейкоб