将JsonRequestBehavior设置为AllowGet时,可以披露哪些“敏感信息”

时间:2014-01-30 09:49:38

标签: asp.net-mvc json security http-post http-get

当我URL(使用内置returning Json)时,每次从浏览器的地址栏测试新的MVC JsonResult helper时,我都会收到相同的旧错误:

  

此请求已被阻止,因为在GET request中使用此信息时,可能会向第三方网站披露敏感信息。要允许GET requests,请将JsonRequestBehavior设置为AllowGet

而不是在确认中咕噜咕噜地说起Fiddler做一个帖子请求,这一次,我想知道GET请求究竟是什么意味着POST请求没有?

6 个答案:

答案 0 :(得分:102)

在您的回访中

使用以下内容:

return this.Json("you result", JsonRequestBehavior.AllowGet);

答案 1 :(得分:74)

假设您的网站有GetUser网络方法:

http://www.example.com/User/GetUser/32

返回JSON响应:

{ "Name": "John Doe" }

如果此方法仅接受POST请求,则只有在使用POST方法向http://www.example.com/User/GetUser/32发出AJAX请求时,才会将内容返回给浏览器。请注意,除非您已实施CORS,否则浏览器将保护来自向您提出此请求的其他域中的数据。

但是,如果你允许GET请求,以及使用GET而不是POST发出类似于上述的AJAX请求,恶意用户可以使用script将JSON包含在他们自己网站的上下文中HTML中的标记。例如在www.evil.com

<script src="http://www.example.com/User/GetUser/32"></script>

这个JavaScript对www.evil.com应该没用,因为无法读取web方法返回的对象。但是,由于旧版浏览器(例如Firefox 3)中存在错误,因此可以重新定义JavaScript原型对象,并使www.evil.com能够读取您的方法返回的数据。这被称为JSON Hijacking。

有关防止此问题的一些方法,请参阅this post。但是,现代浏览器的更高版本(Firefox,Chrome,IE)并不存在已知问题。

答案 2 :(得分:50)

默认情况下,ASP.NET MVC框架不允许您响应 具有JSON有效负载的GET请求,因为恶意用户有可能通过称为JSON Hijacking的进程获得对有效负载的访问权限。您不希望在GET请求中使用JSON返回敏感信息。

如果您需要发送JSON以响应GET,并且不暴露敏感数据,您可以通过将JsonRequestBehavior.AllowGet作为第二个参数传递给Json来明确允许该行为 方法

阅读Phil Haack的JSON Hijacking

答案 3 :(得分:6)

当我们想从MVC应用程序返回一个json对象到客户端时,我们应该在返回一个对象时显式指定JsonRequestBehavior.AllowGet。因此,我返回如下的json数据来克服这个问题:

Select  a.id
    FROM  ( SELECT  id  FROM  C  WHERE  val = 1 ) AS cx
    JOIN  B  ON b.c_id = cx.id
    JOIN  A  ON (a.id = b.a_id)
    where  a.created >= now() - interval 90 day
      and  a.val = 0 

答案 4 :(得分:3)

您必须像这样使用JsonRequest的JsonRequestBehavior.AllowGet:

let canvas= document.querySelector('canvas');
    canvas.width=900;
    canvas.height=700;
    let base_x=0;
    let base_y=0;
    const ctx=canvas.getContext('2d');
    let player_x=30;
    let player_y=140;
    let speedY=0;
    let speedY2=0;
    let player2_x=830;
    let player2_y=140;
    let arcX=canvas.width/2;
    let arcY=canvas.height/2;
    window.alert('Hráč 1[W,S] \nHráč 2[ArrowUp,ArrowDown]');
    //controls
    function Input(event){ 
        let ifPressed=event.key;
          if(ifPressed==="w"){
                speedY=-7;           
        } else if(ifPressed==="s"){
                speedY=7;      
       }
       else if(ifPressed==="ArrowUp"){
             speedY2=-7;
       }else if(ifPressed==="ArrowDown"){
             speedY2=7;
       }
    }
    function Released(event){
          let ifReleased=event.key;
        if(ifReleased==='w' || ifReleased==='s' ){
              speedY=0;
        }else if(ifReleased==='ArrowUp' || ifReleased==='ArrowDown'){
          speedY2=0;
            }   
            }
           //60fps refresh
          function update(){
              //colission
          if(player_y+speedY<=base_y){
                speedY=0;
                player_y=1;
             }else if(player_y+speedY>=350){
                speedY=0;
                player_y=349;
          }//collision for player 2
          else if(player2_y+speedY2<=base_y){
                speedY2=0;
                player2_y=1;
          }else if(player2_y+speedY2>=350){
                speedY2=0;
                player2_y=349;
          }
             player_y+=speedY;
             player2_y+=speedY2;
                   //bg          
      ctx.fillStyle='black';
      ctx.fillRect(base_x,base_y,canvas.width,canvas.height);
       //ball
       ctx.beginPath();
       ctx.arc(arcX,arcY,20,0,2*Math.PI);
       ctx.strokeStyle='white';
         ctx.stroke();
         ctx.fillStyle='red';
         ctx.fill();
         //collision lopty s hračmi
         if(arcX || arcY >=player_x){

         }
        //player1
    ctx.fillStyle='white';
    ctx.fillRect(player_x,player_y,40,350);  
    //player2
    ctx.fillStyle='grey';
    ctx.fillRect(player2_x,player2_y,40,350);
    }
       window.setInterval(update,1000/60);
       document.addEventListener('keydown',Input); 
       document.addEventListener('keyup',Released);

答案 5 :(得分:0)

返回Json(“ Success”,JsonRequestBehavior.AllowGet)