2009-06-23 2 views
1

Просто была мысльвопрос безопасности Php

Post.php

if (isset($_SESSION['id'])) { 

if (isset($_POST['comment'])) { 
insert() 
} 

<form method="post" action="post.php"> 

<textarea name="comment"></textarea> 

<input type="submit" class="btn" value="Submit"> 

</form> 

} 

$ _SESSION [ 'ID'] должен быть установлен для доступа Post.php. Это достаточно безопасно?

Просто подумайте, может быть, кто-то может просто создать сеанс на своем сайте и создать свой собственный post.php и перенаправить его на мой сайт? вы можете это сделать?

<form method="post" action="http://mysite.com/post.php"> 

<textarea name="comment"></textarea> 


<input type="submit" class="btn" value="Submit"> 

</form> 

Exucse мой ограниченный английский

+0

$ _SESSION ['id'] создан на сервере, его нелегко подделать –

+0

@haim evgi: это зависит от системы хранения сеансов. Некоторые системы хранения сеансов используют файлы cookie для хранения значений. – Salaryman

+0

@ Salaryman, так что использование файлов cookie для хранения СЕССИИ означает сидеть недостаточно безопасно, не так ли? – jrharshath

ответ

0

Реальная проблема заключается в том, что люди могут перехватывать пакета midflight и переписать значения формы, чтобы быть все, что они хотят. Какие цели безопасности вы пытаетесь выполнить? Люди всегда будут иметь полный контроль над значениями, отправленными от клиента, убедитесь, что ваше приложение не принимает ничего из возвращаемых данных.

Посмотрите на тампер данных для Firefox: https://addons.mozilla.org/en-US/firefox/addon/966

+0

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

+0

@stefan mai: хорошо, другие люди, переписывающие ваш контент путем угона сетевого трафика, могут быть проблемой, но решаются https. – stefs

4

Подобно тому, как общего посоветуйте, я всегда предпочитаю «катапультирование-скоро» над «если-если-если». Значение, сверху должно выглядеть больше:

if (!isset($_SESSION['id'])) { 
    // display_error(); 
    // redirect() 
    // whatever else needs to be done 
    exit; 
} 

// continue as planned 
0

Я не вижу никакой неизбежной проблемы. если это важно, убедитесь, что данные передаются через https, поэтому люди, угоняющие сетевой трафик, не могут вмешиваться в это (как предложил Стефан Май). в противном случае это выглядит нормально - пока никто не крадет ваши cookie сеансов пользователей.

decezes method - это еще один стиль кодирования. она не повышает безопасность как таковой, но может предотвратить небрежный программистов от ошибок в виде:

if (checkIfLoggedIn()) { 
    doPrivateThing(); 
} 

doAnotherPrivateThing(); // bug: the programmer should have 
          // put that into the if-conditional 

в противном случае убедитесь, что идентификатор сессии хранится в куки, и никогда не передается прозрачно по адресу! Я не уверен в настройках по умолчанию в php.ini в настоящее время, но он использовал, чтобы url перезаписывал автоматически, если файлы cookie отключены. лучше проверьте это.

, насколько я помню, то ини-вариант session.use_only_cookies (должен быть включен)

php/session security

обновление:

«Просто думал, может быть кто-то может просто создать сеанс на их сайт "

нет, это не сработает. сеансы создаются по session_start(); (или иногда автоматически). $_SESSION['id'] не имеет ничего общего с session_id();, это просто какая-то переменная. хотя это не очень хорошо названо, потому что другие могут действительно путать его (ремонтопригодность!). лучше назовите его $_SESSION['isUserLoggedIn']; или что-то в этом роде.

+0

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

+0

Да, я написал именно это: «может помешать неряшливым программистам совершать ошибки» :) – stefs

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