检测用户是否修改url

检测思路:
在url用参数和key上生成一段hash值,如果参数别修改则生成的hash值和正确的hash值对不上,则验证失败

使用的加密类库:
PEAR2里的Crypt_HMAC2,需要下载引入

用户url列表,生成hash值
cryptForm.php

<?php
require( 'D:\PHP\PEAR\Crypt\HMAC2.php' );

#生成hash值的key
define( 'HASH_KEY' , 'Test Hash Key' );

#生成hash值类
function createHash( $paramsArray )
{
$data = '';
$ret = array();

#构造加密字符串
foreach( $paramsArray as $key => $value )
{
$data .= $key . $value;
}

$cryptor = new Crypt_HMAC2( HASH_KEY , 'md5' );

$hash = $cryptor->hash( $data );

return $hash;
}
?>
<html>
<head>
</head>
<body>
<ul>
<li>
<a href="validateHash.php?id=1&hash=<?php echo createHash( array( 'id' => 1 ) ); ?>">ChatLiu</a>
</li>
<li>
<a href="validateHash.php?id=2&hash=<?php echo createHash( array( 'id' => 2 ) ); ?>">BruceLee</a>
</li>
</ul>
</body>
</html>


生成的页面为

<html>
<head>
</head>
<body>
<ul>
<li>
<a href="validateHash.php?id=2&hash=5dbd509b6e9dd26a8d3c7d1a5e3cc4e5">ChatLiu</a>
</li>
<li>
<a href="validateHash.php?id=2&hash=84ecf3a0d5859281e074ee58d4f1d51d">BruceLee</a>
</li>
</ul>

</body>
</html>


点击url后的验证类

<?php
require( 'D:\PHP\PEAR\Crypt\HMAC2.php' );

define( 'HASH_KEY' , 'Test Hash Key' );

#验证用户是否修改url类
function validateHash( $paramsArray , $userHash )
{
$data = '';
$ret = array();

#构造加密字符串
foreach( $paramsArray as $key => $value )
{
$data .= $key . $value;
}

$cryptor = new Crypt_HMAC2( HASH_KEY , 'md5' );

$hash = $cryptor->hash( $data );

#验证url传过来的hash值是否与加密hash值相等
return $hash == $userHash ? TRUE : FALSE;
}

if( isset( $_GET['id'] ) && isset( $_GET['hash'] ) )
{
$id = $_GET['id'];
$hash = $_GET['hash'];

$result = validateHash( array( 'id' => $id ) , $hash );

if( $result )
{
echo 'good guy, you didn\'t touch my url';
} else
{
echo 'bad guy, don\'t touch my url';
}
} else
{
die( 'parameter missed' );
}
?>


若url未被修改,返回

[quote]good guy, you didn't touch my url[/quote]

如果用户修改了id,则传入和hash和正确的hash对不上,返回

[quote]bad guy, don't touch my url[/quote]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值