2014-02-21 4 views
0

Привет, я пытаюсь понять, как защитить передаваемые переменные в url (я знаю, что get не самый безопасный, но это для теста) Я пытаюсь остановить скрипт если URL-адрес был изменен, проверив идентификатор на хеш-файл md5, но он продолжает говорить, что он не работает, я попробовал кучу разных вариантов, но продолжаю царапать голову, это код, который у меня есть на первой странице что хватает на вход URL-адресПередающие переменные не являются декодированием

// this goes to main.php 
while ($row = mysqli_fetch_array($data)) { 
$variable = $row['case_id']; 
$salt = 'foo'; 
$hash = md5($salt.$variable); 

Это код на второй странице, которая идет, чтобы получить URL-адрес инфо-

// this goes to case.php 

$variable = $_REQUEST['case_id']; 
$salt = 'foo'; 
$hash = md5($salt.$variable); 
if($hash == $_REQUEST['case_id']){ 
echo 'success...pass the hash'; 
}else{ 
echo 'womp womp'; 
} 

Это все выглядит так правильно, но все же дайте мне утробу womp, какого черта я не вижу?

+1

Что такое WOMP WOMP и вы могли бы перевести это в ошибку вы получаете для нас? – lxndr

+0

@ lxndr, Ты серьезно? Ты действительно хочешь это знать? ;) –

+1

Ну, каковы выходы обеих переменных? – berentrom

ответ

1

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

$variable = $row['case_id']; 
$salt = 'foo'; 
$_SESSION['hash'] = md5($salt.$variable); 

А потом ...

$variable = $_REQUEST['case_id']; 
$salt = 'foo'; 
if ($_SESSION['hash'] == md5($salt.$variable)) { 
    echo "Made it!"; 
} 
+0

ok, поэтому шаг 1 установил сеанс с хешем, шаг 2 передал хэш и case_id через URL-адрес, шаг 3 захватил хэш из сеансов, шаг 4, если {хеш из сеансов совпадёт с хешем с URL-адреса, затем продолжит} ​​else {получить ошибку message} является более или менее правильным? –

+0

Более или менее. Должен быть шаг между 3 и 4, где вы создаете хэш из case_id, прошедшего через url, и сравниваете THAT с вашим хешем, хранящимся в сеансе. – ethan

+0

Если вы не хотите хранить хеш-сравнение в сеансе, вы также можете выполнить предложение Rocket Hasmat и поместить его в URL-адрес. Каждый метод одинаково безопасен, пока ваша соль остается скрытой. – ethan

0

использование $_REQUEST['case_id'] для ввода, вывода (проверка) !? это всегда ложно.

$variable = $_REQUEST['case_id']; 
$salt = 'foo'; 
$hash = md5($salt.$variable); 
if($hash == $_REQUEST['hash']){ 
echo 'success...pass the hash'; 
}else{ 
echo 'womp womp'; 
} 

использование Java-скрипт для хэширования в стороне клиента

//just include md5.js from the CryptoJS rollups folder 
var hash = CryptoJS.MD5("foo"+$('#case_id').val()); 
$('#hash').val(hash); 
+0

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

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