Есть ли способ скрыть функции JavaScript от конечного пользователя? - PullRequest
1 голос
/ 03 мая 2011

Я хочу использовать вызовы jquery ajax, например;

function addnewteacher(){
      $.ajax({
          type: "POST",
          url: "/actions/dboss/newteacher.php",
          data: "uname=" + $("#newteacheruname").val() + "&upass=" + $("#newteacherupass").val() + "&name=" + document.getElementById("newteachername").value + "&surname=" + document.getElementById("newteachersurname").value + "&mobile=" + document.getElementById("newteachermobile").value + "&email=" + document.getElementById("newteacheremail").value,
          success: function(html){
              $("#response").html(html);
              $("#response").dialog("open");
          }
      });
  }

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

Спасибо за любую помощь / идею

Ответы [ 6 ]

15 голосов
/ 03 мая 2011

Вы не можете скрыть код JavaScript. Он загружается на клиент и выполняется там. Вы можете запутать это, толкнуть его глубоко внутрь, что угодно, но решительный пользователь все еще может найти его. Ваша безопасность действительно должна быть на сервере, где вы имеете полный контроль, а не на клиенте, где вы вообще не имеете никакого контроля.

Убедитесь, что звонки на /actions/dboss/newteacher.php авторизованы, и убедитесь, что они поступают из действительных источников на сервере. Безопасность через неизвестность - это не безопасность.

4 голосов
/ 03 мая 2011

Нет. Вы можете запутать их, свернув код и все такое, но вы никогда не должны предполагать, что ваш javascript не читается.

Вам необходимо проверить и санировать все данные, отправленные пользователем на стороне сервера.

1 голос
/ 03 мая 2011

Все, что делает JavaScript, может сделать пользователь. Даже если вы думаете, что никто не поймет ваш код, ему это не нужно. Он может просто выполнить это и посмотреть, что это дает. JavaScript должен использоваться только как способ сделать пользовательский интерфейс более удобным, а не защищать что-либо. По сути, вам нужно не писать пароль в JavaScript и проверять его здесь, когда пользователь вводит его, но вы хотите отправить пароль, написанный на сервере, который говорит «да» или «нет». Если вы проверяете форму с помощью JavaScript, вы должны перепроверить ее на стороне сервера, потому что JavaScript может быть отключен и так далее. Сам по себе JavaScript не защищен (как, конечно, клиентский язык).

1 голос
/ 03 мая 2011

Нет, извините, это невозможно.Все, что вы положили в JavaScript, в конечном итоге будет видно пользователю.Независимо от того, как сильно вы пытаетесь минимизировать / запутать код, достаточно установить FireBug , и пароль появится на глазах пользователя, как воздушный шарик.

0 голосов
/ 03 мая 2011

Вы должны пытаться скрыть ключи, а не функцию, подписывающую контент.

Я видел несколько систем JS, которые делают что-то вроде этого:

<script>// Runs first
(function () {
  // Look for a key in the URL like 'http://mysite.com/my/path?my=params#;key=abcd...
  var key = document.location.hash.match(/;key=([^;]+)/)[0];
  // Make sure other code on the page can't retrieve the key.
  // This is analagous to a program zeroing out its argv to prevent
  // key retrieval via /proc.
  document.location = "#";  // Does not cause reload.

  // define signature algo and export to whatever scope is appropriate.
  ...
})();
</script>

Очевидно,, это работает только с одноразовыми ключами.

0 голосов
/ 03 мая 2011

Вы можете использовать что-то вроде Google Closure , чтобы запутать код Javascript, но я бы действительно подумал, зачем вам сначала это скрывать, поскольку они будут испортить свои собственные данные.Если вы не полагаетесь на то, что данные действительны для серверной функциональности (например, для ввода данных непосредственно в SQL), все будет в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...