2014-04-01 48 views
0

在Web應用程序中,當用戶訪問學生列表頁面時,屏幕將顯示帶有超鏈接的學生姓名列表。只顯示允許用戶看到的學生姓名。當用戶點擊超鏈接時,會打開一個新窗口,顯示用戶的詳細信息。子窗口的地址欄顯示如下的url。如何在春季限制對網址的直接訪問

爲myhost:8080/studentID = 100

的問題是,用戶可以修改參數studentID的價值,並得到一些其他的學生,他/她是沒有資格看的細節(因此未顯示先前的列表屏幕)。這是一個安全問題 - 網址操作。

我想到了一些可以防止這種情況的方法。

+0

Prakash的答案是最好的出發點 - 但是從這個問題來看,它聽起來像是在尋找更細粒度的安全性 - 什麼定義了用戶可以看到的學生?用戶是否可以看見學生(在這種情況下,基本的基於角色的安全性將會這樣做),還是用戶只能看到選定的一組學生(例如,一位教師只能看到他們所教的學生)?後者最容易用基於角色和控制器級別驗證/檢查請求是否有效來解決 – rhinds

回答

0

您需要使用cookie和唯一會話ID。因此,用戶登錄並獲得與具有這些臨時訪問令牌或會話ID的數據庫表對應的唯一密鑰。通常這些令牌只在一段時間內有效。在服務器端,您可以測試數據庫的cookie值並重定向不允許訪問的用戶。祝你好運,你問正確的問題繼續前進!

0

您無需打開單獨的窗口。這裏是一些例子。我在這裏使用Jquery。

<script type='text/javascript' src='http://code.jquery.com/jquery-1.6.4.js'></script> 

樣本HTML

<div id="blockbox" > 

    <div class="contents"> 
     <div id="data"></div> 
     <div class="close">close</div> 
    </div> 
</div> 

<div> 
<a href="#" stid='1'>Name1</a> 
<a href="#" stid='2'>Name2</a> 
<a href="#" stid='3'>Name3</a> 
<a href="#" stid='4'>Name4</a> 
<a href="#" stid='5'>Name5</a> 
</div> 

CSS

div.contents 
{ 

    color:#111; 
    font-family: "Calibri"; 
    background-color: #eee; 
    text-align: left; 
    min-height: 100px; 
    box-shadow: 0px 0px 7px #000; 
    position: absolute; 
    width:200px; 
    height: 10px; 
    margin-left:20%; 
    margin-top:20%; 
    padding: 16px; 
    z-index:2000; 
    display: inline-block; 
} 

div.contents .close 
{ 
    width: 20px; 
    height: 24px; 
    position: absolute; 
    top: 0px; 
    right: 30px; 
    cursor: pointer; 

} 

jQuery的

$(document).ready(function(){ 
    $("#blockbox").fadeOut(0); 

    $("div a").click(function(e){ 
    e.preventDefault(); 
     $("#blockbox").fadeIn(100); 
     //$("#data").html($(this).attr("stid")); 

     //This will sent studentID to relevent page 
     //and retrieve the result 
     $.post("myhost:8080", 
     { 
      studentID:$(this).attr("stid"), 
     } 
     ).done(function(data) { 
      $("#data").html(data); 
     }); 
    }); 

    $(".close").click(function(e){ 
     $("#blockbox").fadeOut(100); 
    }); 
}); 

你的服務器端腳本趕上由.post的$方法發送的studentID。即時通訊使用PHP這裏

<?php 
$studentID=$_POST['studentID']; 
//echo student details 
?> 

然後數據變量趕上響應,並增加其使用Spring框架

對於教程#DATA ID

.done(function(data) { 
      $("#data").html(data); 
     }); 

Demo here