2014-02-21 37 views
0

嘿那里,所以我想弄清楚如何确保在URL中传递的变量(我知道得到不是最安全的,但这是一个测试)我试图停止脚本如果URL已经通过检查id对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 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

好吧,所以第1步设置与散列会话,第2步通过网址散列和case_id,第3步从会话中获取散列,第4步如果{散列从会话匹配散列从url然后继续}其他{获取错误消息}是或多或少正确的? –

+0

或多或少。在3到4之间应该有一个步骤,在该步骤中,您通过url传递来自case_id的哈希,并将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没有被篡改。向用户显示盐使得这完全没有意义。 –