Як приховати код JavaScript на веб-сторінці?


94

Чи можна приховати код Javascript із html веб-сторінки, коли вихідний код переглядається через браузер Переглянути вихідну функцію?

Я знаю, що можна затушувати код, але я хотів би, щоб він був прихований від функції джерела перегляду.


1
це клієнтська сторона, і тому вона буде проживати на всіх клієнтах (браузерах)
naveen

8
Чому ви хочете приховати Javascript? Це не так, якби ви коли-небудь поміщали в них будь-які конфіденційні дані, які не хочете, щоб користувач знаходив у них ... Так ?!
Пол

1
Як браузер може знати, який Javascript запускати?
Wylie

1
@PaulPRO має хороший момент - чому ви хочете приховувати JavaScript? Той, хто хоче знати, що ви робите, ЗАВЖДИ зможе отримати ваш сценарій кількома натисканнями клавіш. Вони не будуть покладатися лише на View-Source. Той, хто не знає, як отримати сценарій, швидше за все, не зацікавиться ним.
Stephen Chung

1
@UdayHiwarale Дуже легко побачити, що таке запити GET та інші HTTP, що виконуються клієнтом (просто відкрийте консоль розробника та перейдіть на вкладку мережі). Розробляючи веб-сайт, ви повинні припустити на сервері, що всі запити сфальсифіковані зловмисником - і тому ви повинні перевірити всі дані та обережно уникати кожного рядка, який ви зрощуєте в SQL або інший код.
Сюзанна Дюперон

Відповіді:


132

Я не впевнений, що хтось насправді звертався безпосередньо до вашого питання, а саме до коду, який переглядається за допомогою команди Переглянути джерело браузера.

Як вже говорили інші, немає способу захистити javascript, призначений для запуску в браузері, від певного глядача. Якщо браузер може його запустити, тоді будь-яка рішуча особа може також переглянути та запустити його.

Але якщо ви помістите свій javascript у зовнішній файл javascript, який входить до складу:

<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>

тегів, тоді код JavaScript не буде відразу видно за допомогою команди Переглянути джерело - таким чином буде видно лише сам тег сценарію. Це не означає, що хтось не може просто завантажити цей зовнішній файл javascript, щоб побачити його, але ви запитали, як уникнути його в команді Переглянути джерело браузера, і це зробить це.

Якщо ви хотіли б зробити так, щоб він більше працював над переглядом джерела, ви зробили б усе наступне:

  1. Помістіть його у зовнішній файл .js.
  2. Заплутайте файл так, щоб більшість власних імен змінних були замінені короткими версіями, щоб було видалено весь непотрібний пробіл, тому його неможливо прочитати без подальшої обробки тощо ...
  3. Динамічно включайте файл .js, додаючи програмно теги сценарію (як це робить Google Analytics). Це ще більше ускладнить доступ до вихідного коду за допомогою команди Переглянути джерело, оскільки там не буде простого посилання для натискання.
  4. Помістіть стільки цікавої логіки, яку ви хочете захистити, на сервері, яку ви отримуєте за допомогою викликів ajax, а не виконуйте локальну обробку.

Попри все сказане, я думаю, вам слід зосередитися на продуктивності, надійності та зробити свій додаток чудовим. Якщо вам обов’язково потрібно захистити якийсь алгоритм, покладіть його на сервер, але крім цього, змагайтеся за те, щоб бути кращим у вас, а не за допомогою секретів. Це в кінцевому підсумку так чи інакше працює успіх в Інтернеті.


2
Хороший спосіб вирішити питання безпосередньо. Використання JavaScript для генерації<script> буде тримати його з View Source краще (ще видно під живий DOM) - тобто, він не може бути просто «право натиснув на" в Source View. Можливо, згаданий <script>елемент може бути видалений після виконання JavaScript, що робить трохи громіздкішим (але неможливим) отримання вихідного коду ... звичайно, чистий трафік дуже легко відображатиметься у Firebug чи тому подібному ;-)

3
@Quentin - URL-адреса джерела перегляду дурна - це не те, про що тут вимагають чи пропонують. Переглянути код може будь-яка людина. Я сказав це так само, як і будь-хто інший. Питання полягає лише в тому, наскільки це просто, і, відповідно до заданого питання, наскільки це видно, коли хтось переглядає джерело? Моя пропозиція робить крок видаленим із View Source - це все, але це дійсний додатковий крок.
jfriend00

fetch ("SCRIPT TO HIDE URL or DATAURL"). потім (function (t) {return t.text () || false;}). then (c => self [atob ("ZXZhbA")] (c))
Зібрі

Я думаю, ми можемо додати oncontextmenu = 'return false;' в межах тегу html.
falero80s

@ falero80s - Це намагається зупинити меню правою кнопкою миші, але не зупиняє всі інші способи перегляду джерела сторінки.
jfriend00

38

Ні, це неможливо.

Якщо ви не надаєте його браузеру, то у браузері його немає.

Якщо ви це зробите, то воно (або посилання на нього, за яким легко слідувати) є частиною джерела.


4
Я не впевнений, що ця відповідь справді відповіла на запитання (хоча вона отримала 10 голосів за 15 хвилин). Вони запитали, як утримати код від браузера Переглянути команду View Source. Це можливо. Дивіться мою відповідь нижче. Вони не запитували, як уникнути перегляду коду рішучим хакером.
jfriend00

8
Для того, щоб перейти до джерела перегляду сценарію, потрібно натиснути на посилання у перегляді джерела для документа HTML.
Квентін,

На мій погляд, запитання не було витлумачено правильно. Створення файлу JS є загальним явищем, що тут хоче користувач (я думаю) - це те, як приховати будь-яке значення змінної JS, коли хтось вибирає опцію "переглянути джерело сторінки". +1 з мого боку.
shaILU

Ця відповідь не має жодного сенсу. тут краще дати пропозицію. Кращий варіант використання зовнішнього файлу.
Lalit Mohan

15

Моє рішення натхнене останнім коментарем. Це код invisible.html

<script src="http://code.jquery.com/jquery-1.8.2.js"></script>
<script type="text/javascript" src="invisible_debut.js" ></script>
<body>
</body>

Ясний код invisible_debut.js:

$(document).ready(function () {
var ga = document.createElement("script"); //ga is to remember Google Analytics ;-)
ga.type = 'text/javascript';
ga.src = 'invisible.js';
ga.id = 'invisible';
document.body.appendChild(ga);
$('#invisible').remove();});

Зверніть увагу, що наприкінці я видаляю створений сценарій. invisible.js це:

$(document).ready(function(){
    alert('try to find in the source the js script which did this alert!');
    document.write('It disappeared, my dear!');});

invisible.js не відображається в консолі, оскільки його було видалено, а ніколи - у вихідному коді, оскільки створено за допомогою javascript.

Щодо invisible_debut.js, я затуманив його, а це означає, що знайти URL-адресу invisible.js дуже складно. Не ідеально, але достатньо важко для звичайного хакера.


3
Дивна річ у тому, що я точно дотримувався кроків, і я можу знайти invisible.jsу джерелах. Chrome версії 34.0.1847.131 м
Boyang

2
@Boyang, він просто не відображається в консолі, але якщо ми знаємо шлях, ми все ще можемо його знайти.
Панадол Чонг,

1
Мало того, це завжди відображатиметься на вкладці Мережа більшості DevTools. Знову ж у кожного поважаючого себе хакера будуть доступні DevTools.
GoldBishop

13

Використовуйте Html Encrypter Частина Head, яка має

<link rel="stylesheet" href="styles/css.css" type="text/css" media="screen" />
<script type="text/javascript" src="script/js.js" language="javascript"></script>

copy and paste it to HTML Encrypter and the Result will goes like this
and paste it the location where you cut the above sample

<Script Language='Javascript'>
<!-- HTML Encryption provided by iWEBTOOL.com -->
<!--
document.write(unescape('%3C%6C%69%6E%6B%20%72%65%6C%3D%22%73%74%79%6C%65%73%68%65%65%74%22%20%68%72%65%66%3D%22%73%74%79%6C%65%73%2F%63%73%73%2E%63%73%73%22%20%74%79%70%65%3D%22%74%65%78%74%2F%63%73%73%22%20%6D%65%64%69%61%3D%22%73%63%72%65%65%6E%22%20%2F%3E%0A%3C%73%63%72%69%70%74%20%74%79%70%65%3D%22%74%65%78%74%2F%6A%61%76%61%73%63%72%69%70%74%22%20%73%72%63%3D%22%73%63%72%69%70%74%2F%6A%73%2E%6A%73%22%20%6C%61%6E%67%75%61%67%65%3D%22%6A%61%76%61%73%63%72%69%70%74%22%3E%3C%2F%73%63%72%69%70%74%3E%0A'));
//-->

HTML ENCRYPTER Примітка: якщо на вашій сторінці є сценарій Java, спробуйте експортувати у файл .js та зробіть це як у прикладі вище.

А також цей Encrypter не завжди працює в якомусь коді, що змусить ваш веб-сайт заплутатися ... Виберіть найкращу частину, яку ви хочете сховати, як, наприклад, у <form> </form>

Це може бути змінено попереднім користувачем, але не всі, як я, знають це.

Сподіваюся, це допоможе


3
Ваше надане посилання не відкрите, дайте код помилки 404.
Akash Limbani

Цей самий підхід полягає в тому, як хакери сайтів вводять шкідливий код на веб-сайт. Деякі з найдосконаліших інструментів веб-сканера безпеки шукають такий код і очищають його від джерела сторінки.
GoldBishop

8

Я не впевнений, що існує спосіб приховати цю інформацію. Незалежно від того, що ви робите, щоб затуманити або приховати все, що ви робите в JavaScript, все одно зводиться до того, що ваш браузер повинен завантажити його, щоб використовувати його. Сучасні браузери мають готові інструменти налагодження / аналізу веб, які роблять сценарії вилучення та перегляду тривіальними (просто натиснітьF12 у Chrome).

Якщо вас турбує викриття якоїсь комерційної таємниці або алгоритму, то єдиним вашим рішенням є інкапсуляція цієї логіки у дзвінку веб-служби та запрошення вашої сторінки до цієї функції через AJAX.


Скажімо, вас турбує викриття секрету. Скажімо, ви поміщаєте його у файл PHP і викликаєте через Ajax. Тоді кожен може зателефонувати до цього PHP-файлу і знайти секрет. Ймовірно, є спосіб захистити секрети за допомогою PHP, і я намагався знайти його. Створіть випадкове число та вимагайте, щоб усі активи подавали його як аргумент у файл PHP. Я думаю, це працює, але не якщо зловмисний користувач використовує інструменти розробника.
Девід Спектор,

8

"Не можна!"

О так, це ....

//------------------------------
function unloadJS(scriptName) {
  var head = document.getElementsByTagName('head').item(0);
  var js = document.getElementById(scriptName);
  js.parentNode.removeChild(js);
}


//----------------------
function unloadAllJS() {
  var jsArray = new Array();
  jsArray = document.getElementsByTagName('script');
  for (i = 0; i < jsArray.length; i++){
    if (jsArray[i].id){
      unloadJS(jsArray[i].id)
    }else{
      jsArray[i].parentNode.removeChild(jsArray[i]);
    }
  }      
}

4
Дуже хороша відповідь. Це справді приховує використання javascript, однак, лише коли ви використовуєте Інспектор елементів / Інструменти розробника, ви все ще можете побачити, чи шукаєте ви через View Source. (Принаймні на хромі)
Патрік Бард

тут змінна "head" зайва або вона виконує якусь важливу функцію?
Майстер Джеймс

3
він приховує його лише частково ... будь-яка відкрита функція (глобальна) може бути показана інструментами розробника, і вона відображатиметься як анонімна функція, але інструменти розробника повідомляють вам все, включаючи те, звідки вона була завантажена
Зібрі

це лише приховує його від джерела .. будь-яка анономна функція зробила б те саме: fetch ("СКРИПТ ДО ХАДЖЕННЯ"). then (function (t) {return t.text () || false;}). then (c = > self [atob ("ZXZhbA"]] (c))
Зібрі

5

Думаю, я знайшов рішення приховати певні коди JavaScript у джерелі перегляду браузера. Але для цього потрібно використовувати jQuery.

Наприклад:

У вашому index.php

<head>
<script language = 'javascript' src = 'jquery.js'></script>
<script language = 'javascript' src = 'js.js'></script>
</head>

<body>
<a href = "javascript:void(null)" onclick = "loaddiv()">Click me.</a>

<div id = "content">
</div>

</body>

Ви завантажуєте файл у тілі html / php, викликаний функцією jquery у файлі js.js.

js.js

function loaddiv()
{$('#content').load('content.php');}

Ось фокус.

У вашому файлі content.php поставте інший тег head, а потім викличте звідти інший js-файл.

content.php

<head>
<script language = 'javascript' src = 'js2.js'></script>
</head>

<a href = "javascript:void(null)" onclick = "loaddiv2()">Click me too.</a>

<div id = "content2">
</div>

у файлі js2.js створіть будь-яку потрібну вам функцію.

приклад:

js2.js

function loaddiv2()
{$('#content2').load('content2.php');}

content2.php

<?php
echo "Test 2";
?>

Будь ласка, перейдіть за посиланням, а потім скопіюйте, вставте його в ім'я файлу jquery.js

http://dl.dropbox.com/u/36557803/jquery.js

Сподіваюся, це допоможе.


Це забезпечить лише мінімальний захист. Перейти на вкладку мережі інструментів розробника браузера і побачити всі завантажені сценарії, включаючи завантажені через Ajax, просто.
JJJ

4

Ви могли б використовувати document.write.

Без jQuery

<!DOCTYPE html>
<html>
<head><meta charset=utf-8></head>
<body onload="document.write('<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>');">
</body></html>

Або з jQuery

$(function () {
  document.write("<!doctype html><html><head><meta charset=utf-8></head><body><p>You cannot find this in the page source. (Your page needs to be in this document.write argument.)</p></body></html>")
});

2

Не можливо!

Єдиний спосіб - заплутати javascript або зменшити ваш javascript, що ускладнює для кінцевого користувача зворотне проектування. однак не неможливо здійснити зворотне проектування.


1

Підхід, який я використовував кілька років тому -

Нам потрібен файл jsp, файл сервлета Java і файл фільтра java.

Надайте користувачеві доступ до jsp-файлу. URL-адреса типу користувача jsp-файлу.

Випадок 1 -

  • Jsp-файл перенаправить користувача на сервлет.
  • Сервлет виконає основну частину сценарію, вбудовану у файл xxxxx.js та
  • Використовуючи Printwriter, він надасть відповідь користувачеві.

  • Тим часом Servlet створить файл ключа.

  • Коли сервлет намагається виконати в ньому файл xxxx.js, фільтр
    активує і виявить, що файл ключа існує, а отже, видалить
    файл ключа .

Таким чином, один цикл закінчений.

Коротше кажучи, файл ключа буде створений сервером і буде негайно видалений фільтром.

Це відбуватиметься при кожному ударі.

Випадок 2 -

  • Якщо користувач спробує отримати джерело сторінки та натиснути безпосередньо на файл xxxxxxx.js, фільтр виявить, що файл ключа не існує.
  • Це означає, що запит не надійшов від жодного сервлету. Отже, це заблокує ланцюжок запитів.

Замість створення файлу можна використовувати значення налаштування у змінній сеансу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.