- CSRF на търсачка
12345
WT форуми -> PHP MySQL ASP.NET -> CSRF на търсачка
Създайте нова тема Напишете отговор 
Автор Съобщение
pro12
Турист
Турист

Регистриран на: 10/01/2013 5:08 pm

Support: 0
Bonus: 0
Мнения: 444
Мнение 10/04/2018 1:15 pm     CSRF на търсачка Отговорете с цитат


Добавил съм CSRF токен към формата на търсачката най отгоре във всяка стр имам.
PHP code:
<head>
<?php use Lib\Csrftoken; //get token
$token = new Csrftoken();
var_dump($_SESSION['toksearch']);
?>

Формата на търсачката
HTML code:
<form action="/search" method="GET" name="searchf">
<input type="text" id="searchpole" size="15" maxlength="25" name="search">
<br/><input type="hidden" name="tokens" value="<?php echo $token->searchtoken(); ?>">
<input type="submit" name="searchf" id="btnsearch" value="search" />

</form>

Така проверявам токена
PHP code:
if (isset( $_GET['searchf'] )  ) {
$searchdata['search'] = $_GET['search'];
$token = $_GET['tokens'];


if(isset($_SESSION['toksearch']) && $token === $_SESSION['toksearch']) {
echo 'ok'; } else {
echo 'try again';
}

Когато имам най отгоре във всяка стр
PHP code:
       var_dump($_SESSION['toksearch']);
всичко е ок, но като махна
PHP code:
       var_dump($_SESSION['toksearch']);
дава try again. Някаква идея да имате?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2649
Мнение 10/04/2018 3:43 pm      Отговорете с цитат


Офтопик (може би), но не ти трябва csrf защита на GET request.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3073
Мнение 10/04/2018 4:02 pm      Отговорете с цитат


Fakeheal написа:
Офтопик (може би), но не ти трябва csrf защита на GET request.

Ти ще го кажеш офтопик, но аз ще го кажа направо. Като цяло не му е нужен CSRF token особено пък така структуриран... Толкова е лесно да е заобиколи значението му, че направо е излишен. Ако ме питате защо и как просто си представете че влизам в страницата сканирам изходният код вадя си го, чрез регулярен израз и го пращам директно към сървъра със следващата заявка... И каква е файдата от тази защита? Никаква... Вижте CAPTCHA е по-различно нещо. Четох другата тема, но тя много се разводни и не пожелах да опиша защо е излишен особено структуриран по този начин, който е в примера.
Не виждам тук да имаш поставен session_start();
PHP code:

session_start();

if (isset( $_GET['searchf'] ) ) {
$searchdata['search'] = $_GET['search'];
$token = $_GET['tokens'];


if(isset($_SESSION['toksearch']) && $token === $_SESSION['toksearch']) {
echo 'ok'; } else {
echo 'try again';
}


Отделно би трябвало да проверяваш така:
$token == $_SESSION['toksearch']
не така:
$token === $_SESSION['toksearch']

PHP code:

<?php
session_start();

if (isset( $_GET['searchf'] ) ) {
$searchdata['search'] = $_GET['search'];
$token = $_GET['tokens'];
if(isset($_SESSION['toksearch']) AND ($token == $_SESSION['toksearch'])) {
echo 'ok';
} else {
echo 'try again';
}
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2649
Мнение 10/04/2018 4:18 pm      Отговорете с цитат


Какъв е проблема на 3-те равнота?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3073
Мнение 10/04/2018 4:24 pm      Отговорете с цитат


Fakeheal написа:
Какъв е проблема на 3-те равнота?

Принципно никакъв не е проблема, но не го знам какво прави точно и може да се получава при него един частен случай. Ще ти го дефинирам с пример, че по-лесно ще ме разбереш:
PHP code:

<?php
$one = 1;
$two = "1";

if ($one == $two) {
print 'OK if 1';
}

if ($one === $two) {
print 'OK if 2';
}
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pro12
Турист
Турист

Регистриран на: 10/01/2013 5:08 pm

Support: 0
Bonus: 0
Мнения: 444
Мнение 10/04/2018 4:27 pm      Отговорете с цитат


Е нали при всяка заявка са генерира нов токен и ако подадеш фалшива заявка тя ще бъде с токен по различен от записан в сесията. Имам и
PHP code:
session_start(); 
А начин за защита от фалшиви заявки има ли по различен начин от моя?
PHP code:
    if(isset($_SESSION['toksearch']) AND ($token == $_SESSION['toksearch'])) {
И така проблема си остава.

Последната промяна е направена от pro12 на 10/04/2018 4:33 pm; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3073
Мнение 10/04/2018 4:31 pm      Отговорете с цитат


Той нека си се генерира нов ключ, проблема ти е в това, че какъвто и ключ да генерираш и запазиш в сесията за последващо сравняване аз ще го взема от странисата с парсване и ще го подам при структуриране на заявката ми от локалната машина и ще излъжа системата ти, че реално аз съм на страницата през браузъра ти и попълвам формата. И в предната тема имаше намек по въпроса, но не ти беше обяснено, а ти изцяло яхна вълната относно идеята ти да се защитиш. Използвай хубава CAPTCHA и ще решиш проблемите си.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2649
Мнение 10/04/2018 4:36 pm      Отговорете с цитат


@dakata__92
Това не е проблем, а е правило. Трите равнота освен стойностите проверява и типа данни.

Само, че той има стригн (идващ от гет) и сравнява със стойност в сесията (която пак е стринг).



@pro12
Отново казвам, няма нужда да подаваш csrf токен за GET заявка.

Относно проблема, може ли да пуснеш кода, който генерира токен-а и го записва в сесията. Според мен си го сложил преди кода, в който проверяваш токена от гет (който е от предното сетване).

Ако аз ползвам търсачката ти и искам да споделя резултата с приятел (копирам линка) и му го пратя. Той няма да може да го отвори, защото токена е expire-нал Smile

Последната промяна е направена от Fakeheal на 10/04/2018 4:40 pm; мнението е било променяно общо 2 пъти
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
pro12
Турист
Турист

Регистриран на: 10/01/2013 5:08 pm

Support: 0
Bonus: 0
Мнения: 444
Мнение 10/04/2018 4:38 pm      Отговорете с цитат


dakata__92 написа:
Той нека си се генерира нов ключ, проблема ти е в това, че какъвто и ключ да генерираш и запазиш в сесията за последващо сравняване аз ще го взема от странисата с парсване и ще го подам при структуриране на заявката ми от локалната машина и ще излъжа системата ти, че реално аз съм на страницата през браузъра ти и попълвам формата. И в предната тема имаше намек по въпроса, но не ти беше обяснено, а ти изцяло яхна вълната относно идеята ти да се защитиш. Използвай хубава CAPTCHA и ще решиш проблемите си.

Аз не съм писал др тема!!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3073
Мнение 10/04/2018 4:40 pm      Отговорете с цитат


Fakeheal написа:
Това не е проблем, а е правило. Трите равнота освен стойностите проверява и типа данни.

Само, че той има стригн (идващ от гет) и сравнява със стойност в сесията (която пак е стринг).

Знам, но пак повтарям, че не знам дали колегата с темата, има такова несъответствие. Ако проблема не е в операторите и частните им случаи, то идват последващите изводи. Или двата стринга не са равни (да принтира $_SESSION['toksearch'] и $token) преди да прави проверките, за да види сам дали са еднакви, или сесията не съдържа нищо.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 350
Bonus: 698
Мнения: 2649
Мнение 10/04/2018 4:43 pm      Отговорете с цитат


dakata__92 написа:
...


Просто исках да кажа, че няма смисъл да предлагаш нещо, което не е много от помощ. Без дори да обясниш каква е разлиакта. Тук сме да се учим.

Иначе чисто логически погледнато. Щом токена е успял да го подаде на URL (и го взима с $_GET) е стринг.

Ако го е подал на страницата, която е сложила URL-a, значи е стринг.

Автоматично изключваме проблем в операторите за сравнение.

Поне това е моя начин на мислене.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3073
Мнение 10/04/2018 4:44 pm      Отговорете с цитат


<form action="/search" method="GET" name="searchf">
<input type="submit" name="searchf" id="btnsearch" value="search" />

Две структури с едно име...
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
12345
Страница 1 от 5


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети