2016-08-16 8 views
0

私はこのコードを持っています。 それはうまくいきます。Jqueryでdivコンテンツを安全に隠すには?

しかし、問題は誰もがこのdivを(chrome jsデバッガで調べるだけで)表示でき、結果として誰でも送信操作を行うことができるということです。 私の質問は、jqueryで安全に隠すことができますか?

ありがとうございました。

<div id="submitDiv"> 
    @using(Html.BeginForm()) 
    { 
     @Html.hidden("hiddenField") 
     <button type="submit">Save</button> 
    } 
</div> 

<script> 
    $(function() { 
     var value=ajaxFunction(); 

     if(value) 
     { 
      $("#divSubmit").show(); 
     } 
     else 
     { 
      $("#divSubmit").hide(); 
     } 
    }); 

</script> 
+0

を追加し、私は、CSSスタイルのディスプレイを使用します。この –

+2

のためのどれもあなたは、Webページに安全に何かを隠すことはできません。 – epascarello

+0

クライアントに送信されたものは、何とかクライアントが何とか見ることができます。 – MrTux

答えて

1

コントローラでこのビューを返す部分ビューとメソッドを作成します。そして、このようなMVCのビューのJavaScriptコードでは、このメソッドにURLを割り当てる:

$.ajax({ 
    url: linkToPartialView 
}).done(function (html) { 
    $('#divSubmit').append(html); 
}); 
:今

var linkToPartialView = '@Url.Action('NameOfMethod', 'NameOfController')'; 

、あなたのビューを表示する必要があるときは、次のURLでAJAX呼び出しを行います

あなただけにそのコンテンツを削除し、それを隠すことになるでしょう:

$('#divSubmit').children().remove(); 
-1

あなたがそのdiv要素を必要としない場合は、代わりにこれを行うことができます:クライアントに送信

else 
     { 
      $("#divSubmit").remove(); 
     } 
1

すべてが何らかの形で、クライアントで表示することができます。情報を安全に隠す方法はありません(暗号化してもかまいませんが、それでも何らかの理由で、サーバー側セッションに情報を保存する可能性があります)。

これは、セキュリティ関連のチェックをサーバー(たとえば、JavaScriptを無効にしたクライアントやすべてのチェックをローカルでバイパスしたクライアント)で実行する必要があり、クライアントのデータを信頼できないようにする理由もあります。

1

クライアントサイドの変更が可能なので、Html/CSS/JQueryで行うことはできません。

サーバーサイドのコードに何かを追加する必要があります。そうでない場合は、表示しないでください。

のような何か:

@if (Model.CanShow) 
{ 
    <div id="submitDiv"> 
     @using(Html.BeginForm()) 
     { 
      @Html.hidden("hiddenField") 
      <button type="submit">Save</button> 
     } 
    </div> 
} 

注:私はあなたがASP.NET MVCを使用している見るように私はC#のコード例を提供してきました。

+0

それでも、送信コード(サーバー上)でユーザーが許可されているかどうかを検証します。ブラウザから*何も*信頼しないでください。 –

+0

答えてくれてありがとう、私はこれを私の心に持っていましたが、問題は私がajax関数の結果に依存しているため、ビューを再読み込みしたくないということです。 –

+1

その場合は、Pawelの答えを参照してください。 – webnoob

0

非表示、すべてこれを見ることができる、クライアント側でそう、あなたはPHPなどのサーバーサイド言語、C#/ MVCを経由して、これを制御する必要がJavaScriptの実行/我々 bforms ...
出力HTML

@if (false) 
{ 
    <div> 
     Hidden things 
    </div> 
} 
0

This(フィドルリンク)を制御することができますので、あなたが得ようとしているとして、 "安全な" とあります。私の場合は、イベントハンドラにラップされているので、要素を調べたり、それを示す関数にアクセスすることはできません。必要なイベントにラップされます。この種の「保護」はWeb開発者の99%によって壊れることはありません。私はそれをどのように壊すのか分かりません。

編集:私はあなただったらをさらに保護

//Register the handler to the event you want to have show the submit form 
//You can just add this to anything you want... i chose a button because.. .reasons, you probably 
//want some checkbox or timed event to check if you filled out your form 
document.getElementById("enableForm").addEventListener('click', 
    (function() { 
    var submitForm = document.createElement('div'); 
    var submitButton = document.createElement('button'); 
    submitButton.innerHTML = "Submit"; 
    submitButton.addEventListener('click', submit); 
    submitForm.innerHTTML = "<p>This is a form</p>"; 
    submitForm.appendChild(submitButton); 
    var extraProtection = false; 

    function ShowSubmitForm() { 
     var parent = document.getElementById("formParent").appendChild(submitForm); 
    } 

    function ShowFormHandler() { 
     //Make a function that handles when to show the form 

     ShowSubmitForm();  
    } 

    function submit() { 
     alert("Protected submit"); 
    } 

    return ShowFormHandler; 
    })() 
); 
+0

コンソールウィンドウでこのイベントを登録しているスクリプトのコンテンツを削除するだけですか?それはあなたが注入しているHTMLを取得し、要素インスペクタを使用して挿入し、通常通りに提出します。 – webnoob

+0

コンテンツを削除すると、フォームを取得できません。何も登録されていないので、その前提は破棄されます... 。2番目のHTMLについては、スクリプトから読むことができますが、それを書き留めることができます。ページインスペクタで挿入されているHTMLへの参照を取得することはできません。これは、関数クロージャでラップされています。したがって、 'document.getElementById( 'parent')。addChild(submitForm);'あなたは未定義になります。フォームを書いて追加することもできますが、これはOPのフォームと同じではありません。イベントハンドラのみを発行します。 – Dellirium

+0

関数内にラップされているため、この部分はユーザに公開されません。参照できません。特別な保護層が必要な場合は、別の変数を追加して、annonymus関数の条件をfalseに設定し、trueに設定しない限り、送信をトリガーしないでください。誰かがコード内のHTMLモックアップを見ることができ、まったく同じモックアップを書いて、提出するために使用することは、誰かがあなたのウェブサイトをコピーしてそのウェブサイトを使用して提出できると主張している。関数。 – Dellirium

関連する問題