gpt4 book ai didi

asp.net-mvc - 防止用户更改 URL 中的 ID 以查看其他记录

转载 作者:行者123 更新时间:2023-12-01 08:05:45 25 4
gpt4 key购买 nike

您可能已经看到有关 HotelHippo 泄露数据的新闻报道。基本上,一旦登录,您就可以更改 URL 中的五位数 ID 号码并查看系统上的其他预订。
对我来说,我在 MVC 中编写网站代码,因此我习惯了 URL 的 {controller}/{action}/{id} 外观。
bbc news - Scott Helme

我的问题是:使用 MVC 如何防止更改显示其他用户数据的 URL?是否有“公认”的方式/最佳实践?

我能想到一对:

  • 构建一个安全模块,在访问权限时检查数据库中的记录
  • 更改路由,使用户永远不会在 url 中看到 ID(尽管当您单击链接并将其传递给操作时仍然使用 ID...如何?)
  • 只是不要使用顺序 ID(但这种安全性不是通过默默无闻而不是完全依赖吗?)
  • 最佳答案

    有点晚了,但这是我的答案 =D

    您可以使用 token (至少我是这样做的^^):

    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

    输入.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(); ?>">

    检查表单提交时的 token
    if(Token::check(Input::get('token'))) {
    //do your redirect and other stuff here
    }

    有了这个,您应该能够使用户更改 URL 变得不可能。然后,您可以在“如果 token 存在”检查之后重定向到卡住站点。

    希望对你有帮助^^

    关于asp.net-mvc - 防止用户更改 URL 中的 ID 以查看其他记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24525301/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com