您可能已经看过有关HotelHippo泄露数据的新闻报道。基本上一旦登录,您可以更改URL中的五位数ID号,并查看系统上的其他预订。 对我来说,我在MVC中编码网站,所以我习惯了URL的{controller} / {action} / {id}外观。 bbc news - Scott Helme
我的问题是:使用MVC,如何防止更改显示其他用户数据的URL?是否有“接受”的方式/最佳做法?
我能想到一对夫妇:
答案 0 :(得分:0)
您可以将Guid而不是整数作为实体的ID
答案 1 :(得分:0)
有点晚了,但这里是我的答案= D
你可以使用一个令牌(至少我是怎么做的^^):
<强> Token.php 强>
class Token {
//generate the token name
public static function generate(){
return Session::put(Config::get('session/token_name'), md5(uniqid()));
}//end generate()
//chek token is correct
public static function check($token){
$tokenName = Config::get('session/token_name');
//check if session exists and if token supplied is equal to the one given to the user
if(Session::exists($tokenName) && $token === Session::get($tokenName)){
Session::delete($tokenName);
return true;
}//end if exists
return false;
}//end check()
}//end class Token
<强> Input.php 强>
//with this class, we catch the input of the user
class Input {
//check if data exists in post or get
public static function exists($type = 'post'){
switch($type){
case 'post':
return(!empty($_POST)) ? true : false;
break;
case 'get':
return(!empty($_GET)) ? true : false;
break;
default:
return false;
break;
}//end switch $type
}//end exists
//get selected $item
public static function get($item){
if(isset($_POST[$item])){
return $_POST[$item];
}else if (isset($_GET[$item])){
return $_GET[$item];
}//end if else
return '';
}//end get
}//end class
<强> HTML 强>
在您的HTML网站上,该网站将重定向到ID为
的下一页使用输入文件
创建表单<!-- Form comes here -->
<!--add a token to the form(security, so you cant edit the url)-->
<input type="hidden" name="token" value="<?php ECHO Token::generate(); ?>">
检查表格提交时的令牌
if(Token::check(Input::get('token'))) {
//do your redirect and other stuff here
}
通过这种方式,您应该能够让用户无法更改URL。然后,您可以重定向到frobidden站点,如果符号存在&#34;如果令牌存在&#34;检查。
我希望它可以帮助你^^