Wie verstecke ich Javascript-Code auf einer Webseite?

93

Ist es möglich, den Javascript-Code vor dem HTML-Code einer Webseite auszublenden, wenn der Quellcode über die Funktion Quelltext anzeigen des Browsers angezeigt wird?

Ich weiß, dass es möglich ist, den Code zu verschleiern, aber ich würde es vorziehen, wenn er vor der Ansichtsquellfunktion verborgen wäre .

Arun Nair
quelle
1
es clientseitig und so wird es auf allen Clients (Browsern) residieren
naveen
8
Warum sollten Sie Javascript verstecken wollen? Es ist nicht so, als würden Sie jemals vertrauliche Daten einfügen, die der Benutzer nicht darin finden soll ... Richtig?!
Paul
1
Wie würde ein Browser wissen, welches Javascript ausgeführt werden soll?
Wylie
1
@PaulPRO hat einen guten Punkt - warum sollten Sie JavaScript verstecken? Jeder, der wissen möchte, was Sie tun, kann Ihr Skript IMMER mit wenigen Tastenanschlägen abrufen. Sie werden sich nicht nur auf View-Source verlassen. Wer nicht weiß, wie man ein Skript bekommt, wird sich wahrscheinlich sowieso nicht dafür interessieren.
Stephen Chung

Antworten:

129

Ich bin mir nicht sicher, ob jemand Ihre Frage direkt angesprochen hat. Dabei handelt es sich um Code, der über den Befehl Quelle anzeigen des Browsers angezeigt wird.

Wie andere bereits gesagt haben, gibt es keine Möglichkeit, Javascript, das in einem Browser ausgeführt werden soll, vor einem bestimmten Betrachter zu schützen. Wenn der Browser es ausführen kann, kann jede bestimmte Person es auch anzeigen / ausführen.

Wenn Sie Ihr Javascript jedoch in eine externe Javascript-Datei einfügen, die im Lieferumfang enthalten ist:

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

Tags, dann wird der Javascript-Code mit dem Befehl View Source nicht sofort sichtbar - nur das Script-Tag selbst wird auf diese Weise sichtbar. Das bedeutet nicht, dass jemand diese externe Javascript-Datei nicht einfach laden kann, um sie anzuzeigen, sondern Sie haben gefragt, wie Sie sie aus dem Befehl "Quelltext anzeigen" des Browsers heraushalten können, und dies wird es tun.

Wenn Sie das Anzeigen der Quelle wirklich besser gestalten möchten, führen Sie alle folgenden Schritte aus:

  1. Legen Sie es in eine externe .js-Datei.
  2. Verschleiern Sie die Datei so, dass die meisten nativen Variablennamen durch Kurzversionen ersetzt werden, sodass alle nicht benötigten Leerzeichen entfernt werden, sodass sie nicht ohne weitere Verarbeitung usw. gelesen werden können.
  3. Fügen Sie die .js-Datei dynamisch hinzu, indem Sie programmgesteuert Skript-Tags hinzufügen (wie dies bei Google Analytics der Fall ist). Dies macht es noch schwieriger, über den Befehl Quelltext anzeigen zum Quellcode zu gelangen, da dort kein einfacher Link zum Klicken vorhanden ist.
  4. Stellen Sie so viel interessante Logik, die Sie schützen möchten, auf den Server, den Sie über Ajax-Aufrufe abrufen, anstatt die lokale Verarbeitung durchzuführen.

Nach alledem sollten Sie sich auf Leistung, Zuverlässigkeit und eine großartige App konzentrieren. Wenn Sie einen Algorithmus unbedingt schützen müssen, stellen Sie ihn auf den Server. Ansonsten konkurrieren Sie darum, der Beste zu sein, ohne Geheimnisse zu haben. So funktioniert Erfolg im Web letztendlich sowieso.

jfriend00
quelle
2
Gute Möglichkeit, die Frage direkt zu beantworten. Die Verwendung von JavaScript zum Generieren des <script>würde es besser aus der Ansichtsquelle heraushalten (immer noch sichtbar unter dem Live-DOM) - das heißt, es kann nicht einfach in der Quellansicht mit der rechten Maustaste angeklickt werden. Es ist möglich, dass dieses <script>Element entfernt wird, sobald das JavaScript ausgeführt wird, was es etwas umständlicher (aber nicht unmöglich) macht, den ursprünglichen Code zu erhalten ... natürlich wird der Nettoverkehr in Firebug oder ähnlichem sehr schnell angezeigt ;-)
3
@Quentin - Ihre URL für die Ansichtsquelle ist albern - das wird hier nicht gefragt oder vorgeschlagen. Jede Person kann den Code anzeigen. Ich habe das so oft gesagt wie jeder andere. Die Frage ist nur, wie einfach es ist und wie sichtbar es ist, wenn jemand Source Source macht. Mein Vorschlag macht es einen Schritt von View Source entfernt - das ist alles, aber es ist ein gültiger zusätzlicher Schritt.
jfriend00
fetch ("SCRIPT TO HIDE URL oder DATAURL"). then (Funktion (t) {return t.text () || false;}). then (c => self [atob ("ZXZhbA")] (c))
Zibri
Ich denke, wir können auch oncontextmenu = 'return false;' hinzufügen. innerhalb des HTML-Tags.
Falero80s
@ falero80s - Das versucht, das Rechtsklick-Menü zu stoppen, stoppt aber nicht alle anderen Möglichkeiten, wie man die Quelle der Seite anzeigen kann.
jfriend00
38

Nein, das ist nicht möglich.

Wenn Sie es dem Browser nicht geben, hat der Browser es nicht.

Wenn Sie dies tun, ist es (oder ein leicht zu befolgender Verweis darauf) Teil der Quelle.

QUentin
quelle
4
Ich bin mir nicht sicher, ob diese Antwort die gestellte Frage wirklich beantwortet hat (obwohl sie in 15 Minuten 10 positive Stimmen erhalten hat). Sie fragten, wie der Code aus dem Befehl View Source des Browsers herausgehalten werden kann. Das lässt sich machen. Siehe meine Antwort unten. Sie fragten nicht, wie sie verhindern könnten, dass der Code von einem entschlossenen Hacker angezeigt wird.
jfriend00
8
Es erfordert nicht viel Entschlossenheit, auf den Link in der Ansichtsquelle für ein HTML-Dokument zu klicken , um zur Ansichtsquelle für das Skript zu gelangen.
Quentin
Meiner Meinung nach wurde die Frage nicht richtig interpretiert. Das Erstellen einer JS-Datei ist üblich. Der Benutzer möchte hier (glaube ich), wie ein JS-Variablenwert ausgeblendet wird, wenn er die Option "Seitenquelle anzeigen" auswählt. +1 von meiner Seite.
ShaILU
Diese Antwort macht keinen Sinn. Es ist besser, hier einen Vorschlag zu machen. Bessere Option zur Verwendung einer externen Datei.
Lalit Mohan
14

Meine Lösung ist vom letzten Kommentar inspiriert. Dies ist der Code von unsichtbar.html

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

Der eindeutige Code von unsichtbar_debut.js lautet:

$(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();});

Beachten Sie, dass ich am Ende das erstellte Skript entferne. unsichtbar.js ist:

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

unsichtbar.js wird nicht in der Konsole angezeigt, da es entfernt wurde und niemals im Quellcode, weil es von Javascript erstellt wurde.

In Bezug auf unsichtbare_debut.js habe ich es verschleiert, was bedeutet, dass es sehr kompliziert ist, die URL von unsichtbaren.js zu finden. Nicht perfekt, aber genug für einen normalen Hacker.

Armand Arapian
quelle
3
Das Seltsame ist, dass ich genau den Schritten gefolgt bin und invisible.jsin Quellen finden kann. Chrome Version 34.0.1847.131 m
Boyang
1
@Boyang, es wird einfach nicht in der Konsole angezeigt, aber wenn wir den Pfad kennen, können wir ihn trotzdem finden.
Panadol Chong
Darüber hinaus wird es in den meisten DevTools immer auf der Registerkarte "Netzwerk" angezeigt. Wieder wird jeder Hacker mit Selbstachtung DevTools zur Verfügung haben.
GoldBishop
13

Verwenden Sie Html Encrypter Der Teil des Kopfes, der hat

<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 Hinweis: Wenn Ihre Seite ein Java-Skript enthält, versuchen Sie, es in die .js-Datei zu exportieren, und machen Sie es wie im obigen Beispiel.

Und auch dieser Encrypter funktioniert nicht immer in einem Code, der Ihre Website durcheinander bringt ... Wählen Sie den besten Teil aus, den Sie verstecken möchten, wie zum Beispiel in <form> </form>

Dies kann vom fortgeschrittenen Benutzer umgekehrt werden, aber nicht jeder Noob wie ich weiß es.

Hoffe das wird helfen

HINAYUPAKS
quelle
3
Ihr angegebener Link ist nicht geöffnet. Geben Sie einen 404-Codefehler ein.
Akash Limbani
Mit demselben Ansatz fügen Site-Hacker schädlichen Code in eine Website ein. Einige der fortschrittlicheren Security Web Crawler-Tools suchen nach Code wie diesem und bereinigen ihn aus der Seitenquelle.
GoldBishop
8

Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, diese Informationen zu verbergen. Unabhängig davon, was Sie tun, um zu verschleiern oder zu verbergen, was Sie in JavaScript tun, kommt es immer noch darauf an, dass Ihr Browser es laden muss, um es verwenden zu können. Moderne Browser verfügen über sofort einsatzbereite Web-Debugging- / Analyse-Tools, mit denen das Extrahieren und Anzeigen von Skripten trivial ist ( F12z. B. nur in Chrome).

Wenn Sie sich Sorgen machen, ein Geschäftsgeheimnis oder einen Algorithmus preiszugeben, können Sie diese Logik nur in einem Webdienstaufruf kapseln und Ihre Seite diese Funktionalität über AJAX aufrufen lassen.

Mark Carpenter
quelle
8

'Ist nicht möglich!'

Oh ja ist es ....

//------------------------------
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]);
    }
  }      
}
Addinall
quelle
4
Sehr gute Antwort. Die Verwendung von Javascript wird zwar ausgeblendet, aber nur wenn Sie die Element Inspector / Developer Tools verwenden, können Sie immer noch sehen, ob Sie über View Source schauen. (Zumindest auf Chrom)
Patrick Bard
Ist die Variable "Kopf" hier redundant oder hat sie eine wichtige Funktion?
Meister James
2
es verbirgt es nur teilweise ... jede exponierte Funktion (global) kann von Dev Tools angezeigt werden und es wird als anonyme Funktion angezeigt, aber Dev Tools sagt Ihnen alles, einschließlich wo es geladen wurde
Zibri
Dies verbirgt es nur vor der Quelle. Eine beliebige Funktion würde genau das Gleiche tun: fetch ("SCRIPT TO HIDE"). then (Funktion (t) {return t.text () || false;}). then (c = > self [atob ("ZXZhbA")] (c))
Zibri
5

Ich glaube, ich habe eine Lösung gefunden, um bestimmte JavaScript-Codes in der Ansichtsquelle des Browsers zu verbergen. Dazu müssen Sie jedoch jQuery verwenden.

Beispielsweise:

In Ihrer 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>

Sie laden eine Datei in den HTML- / PHP-Body, der von einer jquery-Funktion in der js.js-Datei aufgerufen wird.

js.js

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

Hier ist der Trick.

Fügen Sie in Ihre content.php-Datei ein weiteres Head-Tag ein und rufen Sie von dort aus eine weitere js-Datei auf.

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>

Erstellen Sie in der Datei js2.js eine beliebige Funktion.

Beispiel:

js2.js

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

content2.php

<?php
echo "Test 2";
?>

Bitte folgen Sie dem Link und kopieren Sie ihn in den Dateinamen von jquery.js

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

Ich hoffe das hilft.

Jepp
quelle
Dies bietet nur minimalen Schutz. Es ist trivial, auf die Registerkarte "Netzwerk" des Entwicklertools des Browsers zu gehen und alle heruntergeladenen Skripte anzuzeigen, einschließlich der über Ajax geladenen.
JJJ
4

Du könntest benutzen document.write .

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

Oder mit 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>")
});
Blaue Schafe
quelle
2

Ist nicht möglich!

Die einzige Möglichkeit besteht darin, Javascript zu verschleiern oder Ihr Javascript zu minimieren, was es für den Endbenutzer schwierig macht, ein Reverse Engineering durchzuführen. Es ist jedoch nicht unmöglich, ein Reverse Engineering durchzuführen.

gabriele brunori
quelle
1

Ansatz, den ich vor einigen Jahren verwendet habe -

Wir benötigen eine JSP-Datei, eine Servlet-Java-Datei und eine Filter-Java-Datei.

Geben Sie dem Benutzer Zugriff auf die JSP-Datei. Benutzertyp URL der JSP-Datei.

Fall 1 -

  • Die Jsp-Datei leitet den Benutzer zu Servlet weiter.
  • Das Servlet führt den Kernskriptteil aus, der in die Datei xxxxx.js und eingebettet ist
  • Mit Printwriter wird die Antwort an den Benutzer gerendert.

  • In der Zwischenzeit erstellt Servlet eine Schlüsseldatei.

  • Wenn das Servlet versucht, die darin enthaltene Datei xxxx.js auszuführen, wird der Filter
    aktiviert und erkennt, dass eine Schlüsseldatei vorhanden ist, und löscht daher die Schlüsseldatei
    .

Damit ist ein Zyklus vorbei.

Kurz gesagt, die Schlüsseldatei wird vom Server erstellt und sofort vom Filter gelöscht.

Dies wird bei jedem Treffer passieren.

Fall 2 -

  • Wenn der Benutzer versucht, die Seitenquelle abzurufen und direkt auf die Datei xxxxxxx.js klickt, erkennt Filter, dass die Schlüsseldatei nicht vorhanden ist.
  • Dies bedeutet, dass die Anforderung von keinem Servlet stammt. Daher wird die Anforderungskette blockiert.

Anstelle der Dateierstellung kann auch der Einstellungswert in der Sitzungsvariablen verwendet werden.

Bhushan Mahajan
quelle