2016-08-16 3 views
0

У меня этот код. он отлично работает,Как скрыть содержимое div безопасно в JQuery?

, но проблема в том, что любой может просто показать этот div с помощью (chrome js debugger), и в результате любой может выполнить операцию отправки. так что мой вопрос, можно ли скрыть его с помощью 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

Вы не можете скрыть ничего безопасно на веб-странице. – epascarello

+0

Все, что отправлено клиенту, может быть просмотрено клиентом каким-то образом. – MrTux

ответ

1

Создайте частичный вид и метод, который вернет это представление в ваш контроллер. Затем назначить URL для этого метода в коде JavaScript в MVC посмотреть, как это:

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

Теперь, когда вам нужно будет показать ваш взгляд вы сделать вызов Ajax с этим URL:

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

Когда вы хотите, чтобы скрыть его, просто удалите его содержание:

$('#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> 
} 

Примечание: Я предоставил пример C# код, как я вижу, вы с помощью ASP.NET MVC.

+0

Даже тогда проверьте в коде отправки (на сервере), разрешено ли пользователю это делать. Не доверяйте * ничего * в браузере. –

+0

спасибо за ответ, у меня это было на мой взгляд, но проблема в том, что я в зависимости от результата функции ajax, я не хочу перезагружать представление. –

+1

В этом случае см. Ответ Павела, который сделает то, что вы хотите – webnoob

0

JavaScript работать в стороне клиента поэтому каждый это скрыть можно увидеть, что вам нужно это контролировать с помощью языка на стороне сервера, как PHP, C#/MVC /Мы bforms ... потому что может контролировать выходной HTML

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

This (скрипка ссылка)
как "безопасный", как вы собираетесь получить. Никто не может проверить элемент или получить доступ к функции, которая отображает его, поскольку в моем случае она завернута в обработчик событий, в вашем случае она будет перенесена на нужное событие. Эту «защиту» нельзя нарушить 99% веб-разработчиков, я не знаю, как я ее сломаю, я хотел бы, чтобы кто-нибудь здесь показывал, как это сделать.

Edit: добавил еще более высокий уровень защиты

//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

Если вы удаляете контент, вы не можете получить форму, поскольку ничто не регистрирует ее, таким образом, что помещение отбрасывается ... , так как второй HTML можно прочитать из скрипта, но вы могли бы просто записать его тогда. Вы не можете получить ссылку на HTML, который вводится в инспекторе страницы, он завернут в закрытие функции. Таким образом, вы не можете выполнить 'document.getElementById ('parent'). AddChild (submitForm);' вы получите неопределенный. Вы можете написать форму и добавить ее ... но это не совсем то же самое, что и форма OP. Только проблема, обработчик событий. – Dellirium

+0

Никакая часть этого не предоставляется пользователю, поскольку она завернута в функцию, на которую нельзя ссылаться. Если вам нужен дополнительный уровень защиты, добавьте еще одну переменную, с условием функции annonymus, которая установлена ​​в false, и никогда не запускает submit, если он не установит ее в true. Утверждая, что кто-то может взглянуть на макет HTML в коде, тогда напишите точно такой же макет и используйте его для подачи, утверждая, что кто-то может скопировать ваш сайт и использовать этот веб-сайт для отправки, он не может получить доступ или ссылки на элементы в этом закрытии анно функция. – Dellirium

Смежные вопросы