1

たとえば、重要なコントロールを持つ gridview 列があるとします。

通常のユーザーには見えないようにし、管理者ユーザーには見えるようにすると安全ですか?

If (Requst.Servervariables.Get("LOGON_USER").Split('\\')[1] == "MyAdminUser")
{
     gridview1.columns[0].visible = true;
}
4

2 に答える 2

5

可視性が false に設定されている場合でも、コントロールは Viewstate に格納されます。ビューステートは暗号化されておらず、Base-64 でエンコードされているだけです。理論的には、viewstate を解析して値を抽出することは可能であるため、100% 安全というわけではありませんが、ほとんどの人にとって、この脆弱性を悪用して値を抽出することは困難です。

些細なことであれば、おそらくこれで問題ありませんが、非常に機密性の高いデータを保護している場合は、データを非表示にする別の方法を見つけるか、クライアントにまったく送信しないようにします. コントロールの場合、可視性を false に設定するのではなく、管理者ユーザーのコード ビハインドに動的に追加することができます。

そしてもちろん、多層防御を実践してください。

単純にコントロールを隠すことは「あいまいさによるセキュリティ」として知られていますが、これはあまりセキュリティではありません。これはセキュリティの有効な追加レイヤーですが、絶対に信頼すべきではありません (たとえば、URL がわからない場合はアクセスできないと仮定して、機密情報へのリンクを非表示にします)。リンクを非表示にするために使用する場合でも、リンクが「非表示」でない場合と同様に、それらのページを十分に保護する必要があります。攻撃者がそのような「隠された」リンクを見つける方法はたくさんあります。

于 2012-03-27T18:09:02.187 に答える
1

@Davidの回答に加えて。RowBoundDataイベントでこの列のフォーマットを行うことができます。

管理者以外のユーザーの場合は、テキストをこのコントロールに設定しないでください。

protected void grd_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label SecuredColumn = (Label)e.Row.FindControl("SecuredColumn");
        if (Request.ServerVariables.Get("LOGON_USER").Split('\\')[1] == "MyAdminUser")
        {
            SecuredColumn.Text = ((YourClass)e.Row.DataItem).YourPropertyName;
            SecuredColumn.Visible = true;
        }
        else
        {
            SecuredColumn.Visible = false;
        }
    }
}
于 2012-03-27T18:21:28.100 に答える