Czy można ukryć kod Javascript w html strony internetowej, gdy kod źródłowy jest wyświetlany za pomocą funkcji View Source w przeglądarce?
Wiem, że można zaciemnić kod, ale wolałbym, aby był on ukryty w funkcji źródła widoku.
javascript
browser
hide
obfuscation
arun nair
źródło
źródło
Odpowiedzi:
Nie jestem pewien, czy ktoś inny bezpośrednio odpowiedział na Twoje pytanie, które jest kodem przeglądanym za pomocą polecenia Wyświetl źródło w przeglądarce.
Jak powiedzieli inni, nie ma sposobu, aby chronić javascript, który ma działać w przeglądarce, przed zdeterminowaną przeglądarką. Jeśli przeglądarka może go uruchomić, każda określona osoba może go również wyświetlić / uruchomić.
Ale jeśli umieścisz javascript w zewnętrznym pliku javascript, który jest dołączony do:
<script type="text/javascript" src="http://mydomain.com/xxxx.js"></script>
tagi, kod javascript nie będzie od razu widoczny za pomocą polecenia Wyświetl źródło - tylko sam tag skryptu będzie widoczny w ten sposób. Nie oznacza to, że ktoś nie może po prostu załadować tego zewnętrznego pliku javascript, aby go zobaczyć, ale zapytałeś, jak trzymać go z dala od polecenia przeglądarki View Source i to zrobi.
Jeśli naprawdę chcesz, aby przeglądanie źródła było bardziej pracochłonne, wykonaj wszystkie następujące czynności:
Biorąc to wszystko pod uwagę, myślę, że powinieneś skupić się na wydajności, niezawodności i uczynieniu swojej aplikacji świetną. Jeśli absolutnie musisz chronić jakiś algorytm, umieść go na serwerze, ale poza tym konkuruj o bycie najlepszym w sobie, a nie o tajemnice. Tak i tak ostatecznie działa sukces w sieci.
źródło
<script>
sprawiłoby, że lepiej by go nie było w widoku źródła (nadal było widoczne pod aktywnym DOM) - to znaczy, nie można go po prostu „kliknąć prawym przyciskiem myszy” w widoku źródła. Możliwe, że wspomniany<script>
element zostanie usunięty po wykonaniu JavaScript, co nieco utrudni (ale nie niemożliwe) pobranie oryginalnego kodu ... oczywiście ruch sieciowy będzie bardzo łatwo pojawiał się w Firebug lub podobnym ;-)Nie, to niemożliwe.
Jeśli nie podasz tego przeglądarce, to przeglądarka jej nie ma.
Jeśli tak, to to (lub łatwe do zrozumienia odniesienie do niego) stanowi część źródła.
źródło
Moje rozwiązanie jest inspirowane ostatnim komentarzem. To jest kod 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>
Czysty kod invisible_debut.js to:
$(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();});
Zauważ, że na koniec usuwam utworzony skrypt. invisible.js to:
$(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 nie pojawia się w konsoli, ponieważ został usunięty i nigdy w kodzie źródłowym, ponieważ został utworzony przez javascript.
Jeśli chodzi o invisible_debut.js, zaciemniłem go, co oznacza, że znalezienie adresu URL invisible.js jest bardzo skomplikowane. Nie idealne, ale wystarczająco trudne dla normalnego hakera.
źródło
invisible.js
w źródłach. Wersja Chrome 34.0.1847.131 mUse Html Encrypter Część Head, która ma
<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')); //-->
SZYFROWNIK HTML Uwaga: jeśli masz skrypt java na swojej stronie, spróbuj wyeksportować go do pliku .js i upodobnić do powyższego przykładu.
A także ten Encrypter nie zawsze działa w jakimś kodzie, który sprawi, że Twoja witryna będzie zepsuta ... Wybierz najlepszą część, którą chcesz ukryć, na przykład w
<form> </form>
Może to zostać odwrócone przez zaawansowanego użytkownika, ale nie wszyscy tak jak ja wiedzą o tym.
Mam nadzieję, że to pomoże
źródło
Nie jestem pewien, czy istnieje sposób, aby ukryć te informacje. Bez względu na to, co robisz, aby zaciemnić lub ukryć wszystko, co robisz w JavaScript, nadal sprowadza się to do tego, że Twoja przeglądarka musi go załadować, aby z niego korzystać. Nowoczesne przeglądarki mają gotowe do użycia narzędzia do debugowania / analizy sieci, które sprawiają, że wyodrębnianie i przeglądanie skryptów jest banalne (wystarczy nacisnąćF12 na przykład w Chrome).
Jeśli martwisz się ujawnieniem jakiejś tajemnicy handlowej lub algorytmu, jedynym rozwiązaniem jest hermetyzacja tej logiki w wywołaniu usługi sieciowej i wywołanie tej funkcji przez stronę za pośrednictwem technologii AJAX.
źródło
„To niemożliwe!”
O tak, to jest ....
//------------------------------ 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]); } } }
źródło
Myślę, że znalazłem rozwiązanie, aby ukryć niektóre kody JavaScript w źródle widoku przeglądarki. Ale musisz do tego użyć jQuery.
Na przykład:
W pliku 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>
Ładujesz plik w treści html / php, wywoływany przez funkcję jquery w pliku js.js.
js.js
function loaddiv() {$('#content').load('content.php');}
Oto sztuczka.
W pliku content.php umieść kolejny tag head, a następnie wywołaj stamtąd inny plik 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>
w pliku js2.js utwórz dowolną funkcję.
przykład:
js2.js
function loaddiv2() {$('#content2').load('content2.php');}
content2.php
<?php echo "Test 2"; ?>
Kliknij link, a następnie skopiuj i wklej go do nazwy pliku jquery.js
http://dl.dropbox.com/u/36557803/jquery.js
Mam nadzieję, że to pomoże.
źródło
Możesz użyć
document.write
.Bez jQuery
Lub z 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>") });
źródło
Nie jest możliwe!
Jedynym sposobem jest zaciemnienie javascript lub zminimalizowanie kodu javascript, co utrudnia użytkownikowi końcowemu wykonanie inżynierii wstecznej. jednak nie jest niemożliwe do odtworzenia.
źródło
Podejście, które zastosowałem kilka lat temu -
Potrzebujemy pliku jsp, pliku java serwletu i pliku java filtru.
Przyznaj użytkownikowi dostęp do pliku jsp. Adres URL pliku jsp typu użytkownika.
Przypadek 1 -
Używając Printwriter, wyrenderuje odpowiedź użytkownikowi.
W międzyczasie Servlet utworzy plik klucza.
Gdy serwlet spróbuje wykonać znajdujący się w nim plik xxxx.js, filtr
aktywuje się i wykryje istnienie pliku klucza, a tym samym usunie
plik klucza .
W ten sposób jeden cykl się skończył.
Krótko mówiąc, plik klucza zostanie utworzony przez serwer i zostanie natychmiast usunięty przez filtr.
Stanie się to przy każdym trafieniu.
Przypadek 2 -
Zamiast tworzenia pliku można użyć wartości ustawienia w zmiennej sesji.
źródło