Содержание кода от эксплуатации, защищенное JavaScript и Forms

StackOverflow https://stackoverflow.com/questions/3860694

Вопрос

Я создаю страницу, которая позволяет пользователям доступ к определенному разделу моего веб-сайта, если они щелкают 8 из 25 флажков в правильной последовательности.

Прежде всего благодаря Reigel. Для кода Ориньял он взял то, что имел и переписал его, лучше, чем я инициально начал. Также благодаря Питер Айтай Для того, чтобы помочь мне оптимизировать код.

Мой вопрос в том, как я могу очистить вывод, удерживая кого-либо от использования никому, или добавив все, что будет запустить сервер. Это нужно?

Вот живая версия: Нажмите здесь, чтобы увидеть живую рабочую версию

Мой код выглядит следующим образом:

<body onLoad="clearForms()" onUnload="clearForms()">

 <p>&nbsp;</p>
 <p>&nbsp;</p>
 <p>&nbsp;</p>
 <p>&nbsp;</p>

<form id="form1" name="form1" method="post" action="check_combination.php">
<table width="200" border="1" align="center">

<tr>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="1" /></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="2"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="3"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="4"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="5"/></td>
</tr>

<tr>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="6"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="7"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="8"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="9"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="10"/></td>
</tr>

<tr>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="11"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="12"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="13"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="14"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="15"/></td>
</tr>

<tr>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="16"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="17"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="18"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="19"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="20"/></td>
</tr>

<tr>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="21"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="22"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="23"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="24"/></td>
 <td width="20" align="center" valign="middle"><input name="checkbox" type="checkbox" value="25"/></td>
</tr>

<tr>
 <td height="23" colspan="5" align="center" valign="middle" class="label"></td>
</tr>

<tr>
 <td height="28" colspan="5" align="center" valign="middle"><input type="button" value="Test length" id="test" /></td>
</tr>

<tr>
 <td height="28" colspan="5" align="center" valign="middle"><input type="submit" name="button" id="button" value="Submit" /></td>
</tr>

<tr>
 <td height="28" colspan="5" align="center" valign="middle"><input type="button" name="button" id="button2" value="Test hidden input value" /></td>
</tr>

</table>

<input name="result" type="hidden" id="result" />

</form>

</body>

И JavaScript:

function clearForms() {
    var i;
    for (i = 0; (i < document.forms.length); i++) {
       document.forms[i].reset();
 $(':checkbox[name=checkbox]:disabled').attr('disabled', false);

    }
}


//initial checkCount of zero
var checkCount = 0;

//maximum number of allowed checked boxes
var maxChecks = 8;

$(document).ready(function() {

clearForms();

$("#form1").submit(function(e) {
  if($("input:checkbox:checked").length < 8) {
    alert("You must select at least 8 options before submitting!");
    e.preventDefault();
  }
});

var $nameCheckbox = $('input:checkbox[name=checkbox]');

    $nameCheckbox.click(function() {

        //update checkCount
        checkCount = $('input:checked').length;

        if (checkCount >= maxChecks) {
            //alert('you may only choose up to ' + maxChecks + ' options');
            $nameCheckbox.not(':checked').attr('disabled', true);
        } else {
            $nameCheckbox.filter(':disabled').attr('disabled', false);
        }

        if (this.checked) {
            $("td.label").append('<label>' + this.value + ' </label>');
        } else {
            $("td.label").find(':contains(' + this.value + ')').remove();
        }

        $('input[name="result"]').val($("td.label").text());

    });


    $("#test").click(function() {
        alert($('input:checked').length)
    });

    $('#button2').click(function() {
        alert($('input[name="result"]').val());
    });

});
Это было полезно?

Решение

Прежде всего, спасибо за упоминание там и ваш самый прием.

Мой вопрос в том, как я могу очистить вывод, удерживая кого-либо от использования никому, или добавив все, что будет запустить сервер. Это нужно?

Мое предложение всегда выполняет проверку на стороне сервера. Да, вы можете проверить на стороне клиента, но когда он на стороне клиента клиент / пользователь имеет возможность изменить вещи. Итак, если вы можете (я предлагаю вам должен), выполните как проверку - сервер и сторона клиента.

Другие советы

Это не может быть сделано. JavaScript всегда может быть скомпрометирован, и пользователь не может быть доверен.

Вы можете попробовать и запугивать код, но никогда не будет 100% (даже не близко).

Не

Это плохая схема безопасности - если по какой-то другой причине это созрела для грубой силы. Серьезно Рассмотрим использование установленного механизма аутентификации - на любом языке вы предпочитаете тонны вариантов.

Вы можете генерировать хеш на сервере (например, MD5 или лучше SHA-1 или что-то) на основе структуры формы, которую вы затем отправляете обратно на сервер на отправке формы, и пересчитаете на сервер, чтобы увидеть, если пользователь подделан что-нибудь в форме. Это изложено в старом CGI программирование в книге Perl, Что кстати является одной из лучших книг по безопасности веб-программирования, которую я когда-либо читал.

Я не рекомендую это, но для интереса можно быть симпатичный Уверен, что пользователь не вмешивал в свою форму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top