Gibt es eine Möglichkeit, JavaScript-Code zu verbergen oder zu verschlüsseln, um zu verhindern, dass Benutzer proprietäre Programme anzeigen, kopieren und/oder ändern?Wie kann ich JavaScript-Code verstecken oder verschlüsseln?
Antwort
Sie können es verschleiern, aber es gibt keine Möglichkeit, es vollständig zu schützen.
Beispiel obfuscator: http://www.javascriptobfuscator.com/Default.aspx
Nein, es ist nicht möglich. Wenn es im Clientbrowser ausgeführt wird, muss es vom Clientbrowser heruntergeladen werden. Es ist ziemlich einfach, Fiddler zu verwenden, um die HTTP-Sitzung zu untersuchen und heruntergeladene js-Dateien zu erhalten.
Es gibt Tricks, die Sie verwenden können. Einer der offensichtlichsten ist es, einen JavaScript-Obfuscator einzusetzen.
Andererseits verhindert die Verschleierung lediglich das gelegentliche Schnüffeln und verhindert nicht, dass Personen den Code anheben und verwenden.
Sie können kompiliertes Aktionsskript in Form eines Flash-Films ausprobieren.
Einer der besten Kompressoren (nicht speziell ein obfuscator) ist die YUI Compressor.
Die einzige sichere Möglichkeit, Ihren Code zu schützen, ist, ihn nicht zu verschenken. Bei der Clientbereitstellung kann vermieden werden, dass der Client Zugriff auf den Code hat.
So die kurze Antwort ist: Sie kann es nicht tun
Die längere Antwort Flash oder Silverlight erwägt. Obwohl ich glaube, dass silverlight seine Geheimnisse mit dem auf dem Client laufenden Reflektor verraten wird.
Ich bin mir nicht sicher, ob etwas Ähnliches mit der Flash-Plattform existiert.
JavaScript ist eine Skriptsprache und deshalb bleibt in für Menschen lesbaren Form, bis es Zeit für sie ist interpretiert und durch die JavaScript-Laufzeit ausgeführt werden.
Der einzige Weg, um es zumindest von den weniger technischen Köpfen teilweise zu verbergen, ist zu verschleiern.
Verschleierung macht es schwieriger für Menschen, es zu lesen, aber nicht unmöglich für den technisch versierten.
Wenn Sie alles haben insbesondere Sie (wie ein proprietärer Algorithmus) ausblenden möchten, setzen Sie, dass auf dem Server oder in einem Flash-Film setzen und es mit JavaScript aufrufen. Das Schreiben von ActionScript ist dem Schreiben von JavaScript sehr ähnlich, und Sie können zwischen JavaScript und ActionScript kommunizieren. Sie können das gleiche mit Silverlight, aber Silverlight hat nicht die Penetration Flash tut.
Beachten Sie jedoch, dass alle Mobiltelefone sie JavaScript ausführen können, aber nicht Silverlight oder Flash, so dass Sie Ihre mobilen Nutzer lähmende, wenn Sie mit Flash oder Silverlight gehen.
Während alle im Allgemeinen zustimmen, dass Javascript-Verschlüsselung ein bad idea ist, gibt es ein paar kleine Anwendungsfälle, in denen die Verlangsamung des Angriffs besser ist als nichts. Sie können mit YUI Compressor (wie @Ben Alpert) sagte, oder JSMin, Uglify, oder viele mehr.
Allerdings ist der Hauptfall, in dem ich wirklich Sachen "verstecken" möchte, wenn ich eine E-Mail-Adresse veröffentliche. Beachten Sie, dass beim Klicken auf "Element inspizieren" das Problem von Chrome auftritt. Es zeigt Ihren ursprünglichen Code: jedes Mal.Aus diesem Grund wird Verschleierung im Allgemeinen als ein besserer Weg angesehen.
In diesem Sinne nehme ich einen zweizackigen Angriff, um Spam-Bots zu verlangsamen. Ich verschleiere/reduziere die js und führe sie dann erneut durch einen Encoder aus (dieser zweite Schritt ist wiederum völlig sinnlos in Chrome).
Während nicht gerade ein reiner Javascript-Encoder, der beste HTML-Encoder, den ich gefunden habe, ist http://hivelogic.com/enkoder/. Es wird diese drehen:
<script type="text/javascript">
//<![CDATA[
<!--
var c=function(e) { var m="mail" + "to:webmaster";var a="somedomain"; e.href = m+"@"+a+".com";
};
//-->
//]]>
</script>
<a href="#" onclick="return c(this);"><img src="images/email.png" /></a>
in diese:
<script type="text/javascript">
//<![CDATA[
<!--
var x="function f(x){var i,o=\"\",ol=x.length,l=ol;while(x.charCodeAt(l/13)!" +
"=50){try{x+=x;l+=l;}catch(e){}}for(i=l-1;i>=0;i--){o+=x.charAt(i);}return o" +
".substr(0,ol);}f(\")87,\\\"meozp?410\\\\=220\\\\s-dvwggd130\\\\#-2o,V_PY420" +
"\\\\I\\\\\\\\_V[\\\\\\\\620\\\\o710\\\\RB\\\\\\\\610\\\\JAB620\\\\720\\\\n\\"+
"\\{530\\\\410\\\\WJJU010\\\\|>snnn|j5J(771\\\\p{}saa-.W)+T:``vk\\\"\\\\`<02" +
"0\\\\!610\\\\'Dr\\\\010\\\\630\\\\400\\\\620\\\\700\\\\\\\\\\\\N730\\\\,530" +
"\\\\2S16EF600\\\\;420\\\\9ZNONO1200\\\\/000\\\\`'7400\\\\%n\\\\!010\\\\hpr\\"+
"\\= -cn720\\\\a(ce230\\\\500\\\\f730\\\\i,`200\\\\630\\\\[YIR720\\\\]720\\\\"+
"r\\\\720\\\\h][P]@JHADY310\\\\t230\\\\G500\\\\VBT230\\\\200\\\\Clxhh{tzra/{" +
"g0M0$./Pgche%Z8i#p`v^600\\\\\\\\\\\\R730\\\\Q620\\\\030\\\\730\\\\100\\\\72" +
"0\\\\530\\\\700\\\\720\\\\M410\\\\N730\\\\r\\\\530\\\\400\\\\4420\\\\8OM771" +
"\\\\`4400\\\\$010\\\\t\\\\120\\\\230\\\\r\\\\610\\\\310\\\\530\\\\e~o120\\\\"+
"RfJjn\\\\020\\\\lZ\\\\\\\\CZEWCV771\\\\v5lnqf2R1ox771\\\\p\\\"\\\\tr\\\\220" +
"\\\\310\\\\420\\\\600\\\\OSG300\\\\700\\\\410\\\\320\\\\410\\\\120\\\\620\\" +
"\\q)5<: 0>+\\\"(f};o nruter};))++y(^)i(tAedoCrahc.x(edoCrahCmorf.gnirtS=+o;" +
"721=%y;++y)87<i(fi{)++i;l<i;0=i(rof;htgnel.x=l,\\\"\\\"=o,i rav{)y,x(f noit" +
"cnuf\")" ;
while(x=eval(x));
//-->
//]]>
</script>
Vielleicht ist es genug, ein paar Spam-Bots zu verlangsamen. Ich habe noch keinen Spam bekommen, der das benutzt (! Noch).
Ich weiß, dass dies ein alter Thread ist, aber ich möchte nur eine Methode hinzufügen, um Ihre Skripte zu verstecken, und sei es nur, um es etwas schwieriger zu machen. Der Schlüssel ist, AJAX zu verwenden und es vollständig synchron mit Ihren serverseitigen Skripten wie PHP laufen zu lassen. Auf diese Weise ist der gesamte Algorithmus nicht vollständig verfügbar und würde für jeden, der Ihre Codes stehlen möchte, völlig bedeutungslos sein. Natürlich ist es keine 100% idiotensichere Lösung, da Ihre clientseitigen Skripte auch dann offengelegt werden können und können, wenn Sie beispielsweise F12 in Chrome drücken. Auch, wenn Ihre Java-Skripts auf eine Menge serverseitige Prozesse angewiesen sind, gibt es wirklich keinen Grund, sich überhaupt Sorgen zu machen.
In diesem Skript die wahren Inhalte - Ihre aktuelle Client-seitige Scripts - nur über get-Methode abgerufen (ps: Sie können immer noch den Inhalt sehen, indem Sie die URL folgenden -, dass die Verwendung post-Methode zu vermeiden):
<?Php
//THE FOLLOWING VARIABLE IS ADDED TO ENABLE TOGGLING OF THIS FUNCTIONALITY:
$obscureScripts = TRUE;
//IF OBSCURE SCRIPT FUNCTIONALITY IS ALLOWED,
//THE SYSTEM SHOULD ONLY ALLOW REQUESTS TRIGGERED BY SPECIFIED GET METHOD
//OTHER THAN THAT, OR UNLESS $_GET['fetch'] == 'content', PERFORM THE FOLLOWING SCRIPTS:
if ($obscureScripts && !(isset($_GET['fetch']) && $_GET['fetch'] == 'content'))
{ //OPEN A SESSION
session_start();
//CREATE AN INDICATOR THAT THIS METHOD HAS BEEN USED
$_SESSION['obscr'] = 'set';
//CLOSE SESSION WRITER
session_write_close();
//ECHO THE FAKE CONTENTS OF YOUR PAGE
echo "<script type='text/javascript' src='plugins/jquery-1.9.0.min.js'></script> \n".
"<script> \n".
"$.get \n".
"( '?fetch=content', \n".
" function(data) \n".
" { $('body').fadeOut \n".
" ( function() \n".
" { $(this).empty().html(data).fadeIn(100); \n".
" } \n".
" ); \n".
" } \n".
"); \n".
"</script> \n".
"<html><head><title>Page Front</title><link rel='icon' href='icon.ico'/></head> \n".
"<body bgcolor='#121212'><center>Loading...</center></body></html> \n";
//THE FAKE CONTENTS WOULD IN TURN RUN A JQUERY SCRIPT TO RETRIEVE THE ACTUAL PAGE CONTENT
//DO NOT RUN THE REST OF THE SCRIPT/PAGE
exit();
}
//IF OBSCURE SCRIPT FUNCTIONALITY IS ON, AND IF A FETCH REQUEST WAS MADE,
//PERFORM THE FOLLOWING VALIDATION
else if ($obscureScripts && isset($_GET['fetch']) && $_GET['fetch'] == 'content')
{ //ATTEMPT TO RETRIEVE EXISTING SESSION
session_start();
//CHECK IF A SESSION WAS SET: THIS IS TO INDICATE THE LOADING OF FAKE CONTENTS AND THAT
//THE REAL CONTENTS ARE ONLY LOADED ONCE - BY THE JQUERY SCRIPTS PREVIOUSLY LOADED
if (isset($_SESSION['obscr']) && $_SESSION['obscr'] == 'set')
{ //ONCE CONFIRMED, UNSET THE SESSION TO PREVENT ANOTHER REQUEST
unset($_SESSION['obscr']);
//IF THE SESSION BECAME EMPTY AFTER UNSETTING THE 'obscr' SESSION VARIABLE,
//DELETE THE SESSION
if (empty($_SESSION))
{ session_unset();
session_destroy();
}
//CLOSE THE SESSION WRITER AND PROCEED TO THE REST OF THE CONTENTS
session_write_close();
//NOTICE THAT THERE'S NOT exit() OR die() REQUEST HERE.
//THIS MEANS THAT THE SCRIPT WOULD PROCEED TO THE CONTENTS
}
//IF NO SESSION IS SET, THIS MEANS THAT THE GET METHOD IS PROBABLY BEING REQUESTED
//FOR THE SECOND TIME; PROBABLY NOT BY THE PRE-LOADED SCRIPTS
//IF SO, PERFORM THE FOLLOWING:
else
{ //CLOSE THE SESSION WRITER
session_write_close();
//RELOAD THE PAGE BY REDIRECTING TO SELF
header('Location: '.$_SERVER['PHP_SELF']);
//PREVENT SHOWING ANYTHING AFTER THIS CODE
exit();
}
}
?>
<html>
<head><title>The content you want to hide</title></head>
<body>Your precious content.</body>
</html>
Auch dies ist keine narrensichere Methode. Jeder kann das vorinstallierte Skript vollständig überholen, solange es zuvor eine get-Methode auslöst. Ich habe PHP-Sitzungen verwendet, um den Zugriff zu beschränken; das kann noch verbessert werden.
Ehrlich gesagt, das ist nur eine extra Last von Prozess. Aber das hindert niemanden daran, es zu versuchen, oder?
PS: Verzeihen Sie, wenn meine Codes und die Verwendung von Terminologien ein bisschen rudimentär sind. Ich habe zum Zeitpunkt des Schreibens nur ein Jahr lang PHP geschrieben.
Post-Methode:
<?Php
//THE FOLLOWING VARIABLE IS ADDED TO ENABLE TOGGLING OF THIS FUNCTIONALITY:
$obscureScripts = TRUE;
//IF OBSCURE SCRIPT FUNCTIONALITY IS ALLOWED,
//THE SYSTEM SHOULD ONLY ALLOW REQUESTS TRIGGERED BY SPECIFIED GET METHOD
//OTHER THAN THAT, OR UNLESS $_GET['fetch'] == 'content', PERFORM THE FOLLOWING SCRIPTS:
if ($obscureScripts && !(isset($_POST['fetch']) && $_POST['fetch'] == 'content'))
{ //OPEN A SESSION
session_start();
//CREATE AN INDICATOR THAT THIS METHOD HAS BEEN USED
$_SESSION['obscr'] = 'set';
//CLOSE SESSION WRITER
session_write_close();
//ECHO THE FAKE CONTENTS OF YOUR PAGE
echo // USING HEREDOC THIS TIME
<<<SCRIPT
<script type='text/javascript' src='plugins/jquery-1.9.0.min.js'></script>
<script>
\$.post
( "{$_SERVER['PHP_SELF']}",
{ fetch:"content"
}
).done
( function(data)
{ \$("body").empty().html(data);
}
);
</script>
<html>
<head>
<title>Page Front</title>
</head>
<body>
<center>Loading...</center>
</body>
</html>
SCRIPT;
//THE FAKE CONTENTS WOULD IN TURN RUN A JQUERY SCRIPT TO RETRIEVE THE ACTUAL PAGE CONTENT
//DO NOT RUN THE REST OF THE SCRIPT/PAGE
exit();
}
//IF OBSCURE SCRIPT FUNCTIONALITY IS ON, AND IF A FETCH REQUEST WAS MADE,
//PERFORM THE FOLLOWING VALIDATION
else if ($obscureScripts && isset($_POST['fetch']) && $_POST['fetch'] == 'content')
{ //ATTEMPT TO RETRIEVE EXISTING SESSION
session_start();
//CHECK IF A SESSION WAS SET: THIS IS TO INDICATE THE LOADING OF FAKE CONTENTS AND THAT
//THE REAL CONTENTS ARE ONLY LOADED ONCE - BY THE JQUERY SCRIPTS PREVIOUSLY LOADED
if (isset($_SESSION['obscr']) && $_SESSION['obscr'] == 'set')
{ //ONCE CONFIRMED, UNSET THE SESSION TO PREVENT ANOTHER REQUEST
unset($_SESSION['obscr']);
//IF THE SESSION BECAME EMPTY AFTER UNSETTING THE 'obscr' SESSION VARIABLE,
//DELETE THE SESSION
if (empty($_SESSION))
{ session_unset();
session_destroy();
}
//CLOSE THE SESSION WRITER AND PROCEED TO THE REST OF THE CONTENTS
session_write_close();
//NOTICE THAT THERE'S NOT exit() OR die() REQUEST HERE.
//THIS MEANS THAT THE SCRIPT WOULD PROCEED TO THE CONTENTS
}
//IF NO SESSION IS SET, THIS MEANS THAT THE GET METHOD IS PROBABLY BEING REQUESTED
//FOR THE SECOND TIME; PROBABLY NOT BY THE PRE-LOADED SCRIPTS
//IF SO, PERFORM THE FOLLOWING:
else
{ //CLOSE THE SESSION WRITER
session_write_close();
//RELOAD THE PAGE BY REDIRECTING TO SELF
header('Location: '.$_SERVER['PHP_SELF']);
//PREVENT SHOWING ANYTHING AFTER THIS CODE
exit();
}
}
?>
<html>
<head><title>The content you want to hide</title></head>
<body>Your precious content.</body>
</html>
diesen Link Versuchen: http://stackoverflow.com/questions/6869312/how-do-i-hide-javascript-code-in-a-webpage/13262948 # 13262948 -Jepp – Jepp