[PHP/JavaScript/HTML]Quelltext verschlüsseln

asseskiller

Lt. Junior Grade
Registriert
Sep. 2005
Beiträge
447
Hallo ich würde gerne meinen quelltext in dem PHP JavaScript und HTML vorkommen verschlüsseln.
Am wichtigsten ist mir das niemand den Javascript teil nachlesen kann, zumindest nicht ohne weiteres.

Ich hab ne weile gegooglt und hab das hier gefunden http://www.k-faktor.com/kram/quelltext.htm
Mich interessiert hier auf seite 5 wie man das anstellt was da gezeigt wird. Es wird nämlich lediglich gesagt das es nicht wenig aufwand ist. Aber wie mans macht steht nicht da. Weiß wer von euch wie man das macht oder wenigstens wie ich den Javascriptcode für andere nicht lesbar machen kann???

Vielen Dank im Vorraus
 
Hi,

soetwas ähnliches hatte ich vor einigen Wochen hier geposted (HIER).
Wenn Du also JS verschlüsseln willst hilft dir die genannate Seite nicht weiter, denn es gibt immer wege den HTML-Quellcode anzuzeigen, selbst wenn die rechte Maustaste gesperrt ist (man kann sich die Seite auf den Rechner kopieren unter Strg+S und diese dan anschauen). Mit JS kannst du HTML/JS-Code nicht schützen. Mit der Umwandlung in Escape Zeichen (Leerzeile = %20 -beispielsweise-) kannst du auch nur Code ausschlüsseln, den JS ausgiebt, niemals JS Code selbst.
Also bleibt nurnoch eine Serverseitige Lösung. Mit PHP gibt es viele Lösungen Quelltext (HTML/JS) zu verschlüsseln.
Die einfachste Variante ist nach einer Idee von Caeser. Man verschiebt die Zeichen am Alphbeth entlang:

Code:
Z  A B C D E F
A  B C D E F G

Nur bedient man sich eines Tricks: Man nimmt aus dem String jedes Zeichen, z.B. A und schaut mittels der PHP-Funktion
PHP:
ord();
(ORD) die Nummer des Zeichens im ASCII - Zeichensatz nach (Alle Zeichen sind in einem Zeichensatz, der ASCII heißt, darüber hinaus gibt es noch andere Zeichensätze. MEHR).
Dann addiert - oder subtrahiert - man eine Zahl zu dieser ASCII-Zahl dazu und wandelt so die Zahl - mittels der PHP-Funktion CHR() zurück in ein Zeichen. Voila! Der Text ist verschlüsselt. Mit dem gegenteiligen Weg kann man dann den Quelltext wieder zurücklschlüsseln.

PHP-Quellcode für die Verschlüsselung:
PHP:
<?php
  $Str = "Hallo";

  for($i=0;$i<strlen($Str);$i++) {
     $Char = ord($Str[$i]);
     $Char = $Char + 9585;
     $Res .= chr($Char);
  }

  echo $Res;

?>
Die 9585 ist die Zahl um wie viele die Buchstaben veschoben werden. Das ganze müsste nun noch zu einer Rückverschlüsselung umgebaut werden und man könnte es in eine Funktion einbinden.

Fazit: Diese Funktion ist nicht sehr sicher, da es "wenige" Möglichkeiten gibt und man es schnell mit BruteForce aushebeln kann. Aber für eine "normale" Verschlüsselung reicht es.

Zweite Mäglichkeit: Man verlässt sich nicht auf seinen "eigenen" Algorithmus, sondern benutzt einen professionellen.
Zum Beispiel den RC4 Algorithmus von PEAR (HIER).
Man muss dann nur noch diese Datei, die man sich herunterläd, inkludieren und kann dann folgenden Quelltext benutzen um einen String zu verschlüsseln:

PHP:
<?php
$key = "Schluessel";
$message = "Hallo!!";

include(directory/file);

//neues Objekt erzeugen
$rc4 = new Crypt_RC4;

//schlüssel setzen
$rc4->key($key);

//AUsgabe original msg
echo "Original message:" . $message;

//ausgabe verschlüsselte msg
echo "Encrypted message:" . $rc4->crypt($message);;

//ausgabe entschlüsselt
echo "Decrypted message:" . $rc4->decrypt($message);;
?>

Diese Verschlüsselung ist "relativ" sicher. Wenn das, was man schützt, so wichtig ist, kann man auch diese mit der Ersten verschlüsselung kombinieren.

Noch Fragen??? :eek:
CPU:)
 
@CPU: Ich habe in deinem anderen Post schon nicht verstanden, was du damit bezwecken willst. Was nützt es dir, wenn deine Quelltexte auf dem Server verschlüsselt abgelegt sind und sie beim Aufruf der Seite im Client im Klartext vorliegen? Wo ist da der Sinn?

@asseskiller: Im Schritt 5 verarscht dich der Autor. Das ist eine einfache Grafik, die zwar Informationen anzeigen kann, aber keinerlei Funktionalität bietet. Das ist nicht das, was du willst. Meiner Meinung nach, wirst du keinen Erfolg bei deiner Suche haben.
 
Javascript wird erst beim Client (User) kompiliert, von da her ist eine richtige Verschlüsselung nicht möglich und auch nicht sinnvoll, ausser du willst, dass man nicht auf den ersten Blick erkennt wie schlecht dein Code ist ;).

Es gibt Tools, die Variablennamen durch scheinbar sinnlose Zeichenketten ersetzen, aber auch dann kann man mit relativ geringem Aufwand den Code wieder einigermassen leserlich machen.
 
Zuletzt bearbeitet:
Îch find die erstere lösung am besten,
aber wenn ich das jetzt folgendermaßen mache:
PHP:
<?php
  $Str = "<script type='text/javascript'>javascript anweisungen (auch von PHP generiert)</script>";

  for($i=0;$i<strlen($Str);$i++) {
     $Char = ord($Str[$i]);
     $Char = $Char + 1;
     $Res .= chr($Char);
  }

  echo $Res;

?>

dann wird doch was ausgegeben wie für "script" wird "tdjqu" ausgegeben und damit kann doch der browser nix anfangen. Da hab ich doch am ende nichts gekonnt.
Oder wie funzt das?
Im endeffekt codiere ich das doch aber es passiert damit doch nix oder wie?
 
@nordlicht

Naja ich will nicht verstecken wie schlecht mein text ist ich will ihn nur vor konkurenz schützen weil diese dadurch empfindliche daten sichtbar werden.
 
Naja aber du kannst diese Daten nicht verschlüsseln. Denn der Browser muss ja nunmal irgendwas anzeigen. Und das ist am Ende HTML. Deine PHP-Skripte sieht der andere sowieso nicht. PHP wird serverseitig interpretiert und in HTML umgewandelt, also auf Kennwörter um z.B. eine Datenbank einzubinden wird da niemand stoßen.

JavaScripte kann man verkomplizieren, aber am Ende ist es auch purer Quelltext, das selbe wie gesagt mit HTML. Wenn du alles verschlüsseln wolltest, wüsste dein Browser ja garnicht was er anzeigen sollte, weil für ihn nur unbrauchbare Daten ankommen.

Wenn du z.B. auf PayPal oder die Website deiner Bank gehst, kannst du dort auch auf den HTML-Quelltext zugreifen. Ohne Probleme sogar. Die hindern dich nicht daran. Wieso auch. Gibt erstens keine andere Möglichkeit und zweitens kann bei gescheiter PHP-Programmierung eh niemand wissenswerte Daten erschnüffeln. Du sieht an dem Code halt wie die Website aufgebaut ist, ihre Struktur. Aber du sieht nicht, welche Daten dahinter liegen oder wie diese Aufgerufen worden, was für Kennwörter dafür benutzt wurden etc. Wenn dir soviel an Sicherheit liegt, würd ich lieber dafür sorgen, das die entsprechenden Dateien auf dem Server selbst gut geschützt sind und nicht von jedem Heinz aufgerufen werden können.
 
Zuletzt bearbeitet:
Naja gut dann erläutere ich das jetzt mal ein bisschen näher. Ich habe etwas programmiert, womit man ebayauktionen erstellen kann in denen der kunde sich sein angebot via multiple choice selbst zusammenstellen kann. Da dies in echtzeit funzen muss, hab ich javascript gewählt um das ganze zu realisieren. Nun ist es so das immer ein preis errechnet wird wenn man die ganzen sachen anklickt. Leider ist dadurch aber im Quelltext sichtbar, welche Artikel es zu welchen einkaufspreisen usw gibt. Außerdem ist darin die gesamte gewinnkalkulation mit ersichtlich.

Mir ist nur wichtig wie ich das irgentwie verbergen kann. Ich hab mal versucht das ganze extern einzubinden aber dann fürht er meine rechnungen nicht mehr aus. Ich denke dies liegt daran, dass ich viel per php generieren lasse und von einem formular übergeben bekomme
 
Die Rechnung kannst du doch auch in eine PHP-Funktion verlagern. Schon wäre für jeden nur noch das Endergebnis sichtbar; alle PHP-Befehle werden ja vom Webserver in HTML umgewandelt. Die Rechnung als solche ist wie gesagt dann nicht mehr nachvollziehbar, nur das Endergebnis stünde dann eben da.
 
Ich kann dir nur einen Tipp geben: Vergesse die von dir gepostete Seite ganz schnell! Mir ist ein Rätsel, wie jemand so hirnrissige Aktionen als Tipps ausgeben kann. :rolleyes: "In Schritt 2 streuen wir in den Text unserer Seite wahllos und in großer Zahl Unicode-Zeichen ein" :rolleyes:

Auch die anderen "Tipps" wie Rechts-Klick-Verbot, Markierungsverbot usw. sind einfach nur unterste Schublade.
 
Hallo asseskiller,

die Lösung für Dein Problem heißt Ajax. Das bedeutet nichts anderes, als dass dein ganzes Know How in PHP programmiert ist, und Du nur eine kleine JavaScript Schicht hast, welche die Daten an das PHP-Script schickt, diese dort verarbeitet und das Ergebnis wieder zurückgeliefert wird. Als Hilfsmittel hierfür solltest Du das Prototype JavaScript - Famework verwenden. Dieses ermöglicht die Ajax-Kommunikation in verschiedenen Browsern sehr schnell und einfach.

Der Vorteil liegt einfach darin, dass nichts von Deinem Kalkulations-Know-How auf den Client übertragen wird und dank Ajax, es sich trotzdem wie eine Just in Time Berechnung anfühlt.

Das dürfte die einfachste und effektivste Lösung für dein Problem darstellen.


Ciao
 
okay also das mit ajax is ja schön und gut ich hab keinen plan wie das funzen soll.

Hier is mein javascript. Ich hab keine ahung wie ich das effektiv in PHP umsetzen soll. Weil da so viele fälle bei der berechnung im vorraus gemacht werden sollen und wie soll geprüft werden ob ein radiobutton angeklickt ist.
PHP:
<script type="text/javascript">

function show_pic(element)
{
  switch(element.value)
  {
  	<? for($i=1;$i<=$_SESSION["anz_handy"];$i++)
	{
	$wert=$_POST['hbeschreibung'.$i.''];
	$wert = ereg_replace("(\r\n|\n|\r)", "", $wert);
	?>
    case "<? echo "wert".$i."";?>":
        document.getElementById("1").setAttribute("src", "<? echo "http://www.fexcom.de/ebaybuilder/handypluszugabe/handy/_".$_POST['bild'.$i.''].".jpg"; ?>");
		document.getElementById("details").innerHTML = "<? echo $wert; ?>";
    	document.getElementById("erg1").innerHTML = "<? echo $_POST['handy2'.$i.'']; ?> ";
		document.getElementById("111").innerHTML = "<? echo $_POST['ek'.$i.'']; ?>";
		var ek   = parseFloat(document.getElementById("111").innerHTML);
		var prov = parseFloat(document.getElementById("333").innerHTML);
		var pek  = <? if($_SESSION['anz_zugabe']>0){echo "parseFloat(document.getElementById(\"222\").innerHTML)";} else{echo "0";}?>;
		var preis_ausgeben = Math.round((ek+pek-prov+<? echo $marge; ?>)*1.19);
		document.getElementById("preis").innerHTML = preis_ausgeben;
		if(preis_ausgeben <= 0 && preis_ausgeben >=-30)
		{
		document.getElementById("preis").innerHTML = "0";
		}
	break;
    <?
	}
	?>
  }

}
function show_pic2(element)
{
  switch(element.value)
  {
    	<? for($i=1;$i<=$_SESSION["anz_tarif"];$i++)
	{
	?>
    case "<? echo "wert".$i."";?>":
        document.getElementById("2").setAttribute("src", "<? echo "http://www.fexcom.de/ebaybuilder/handypluszugabe/tarif/_".$_POST['tbild'.$i.'']; ?>");
		document.getElementById("erg2").innerHTML = "+ <? echo $_POST['tarif2'.$i.'']; ?>";
		document.getElementById("333").innerHTML = "<? echo $_POST['prov'.$i.'']; ?>";
		var ek = parseFloat(document.getElementById("111").innerHTML);
		var prov = parseFloat(document.getElementById("333").innerHTML);
		var pek  = <? if($_SESSION['anz_zugabe']>0){echo "parseFloat(document.getElementById(\"222\").innerHTML)";} else{echo "parseFloat(0)";}?>;
		var preis_ausgeben = Math.round((ek+pek-prov+<? echo $marge; ?>)*1.19);
		document.getElementById("preis").innerHTML = preis_ausgeben;
		if(preis_ausgeben <= 0 && preis_ausgeben >=-30)
		{
		document.getElementById("preis").innerHTML = "0";
		}
    break;
   <?
   }
   ?>
  }

}
function show_pic3(element)
{
  switch(element.value)
  {
    	<? for($i=1;$i<=$_SESSION["anz_zugabe"];$i++)
		{
	$wert=$_POST['pbeschreibung'.$i.''];
	$wert = ereg_replace("(\r\n|\n|\r)", "", $wert);
	?>
    case "<? echo "wert".$i."";?>":
        document.getElementById("3").setAttribute("src", "<? echo "http://www.fexcom.de/ebaybuilder/handypluszugabe/zugabe/_".$_POST['zbild'.$i.'']; ?>");
		document.getElementById("details2").innerHTML = "<? echo $wert; ?>";
		document.getElementById("erg3").innerHTML = "+ <? echo $_POST['zugabe2'.$i.'']; ?>";
		document.getElementById("222").innerHTML = "<? echo $_POST['pek'.$i.'']; ?>";
		var ek   = parseFloat(document.getElementById("111").innerHTML);
		var prov = parseFloat(document.getElementById("333").innerHTML);
		var pek  = <? if($_SESSION['anz_zugabe']>0){echo "parseFloat(document.getElementById(\"222\").innerHTML)";} else{echo "0";}?>;
		var preis_ausgeben = Math.round((pek+ek-prov+<? echo $marge; ?>)*1.19);
		document.getElementById("preis").innerHTML = preis_ausgeben;
		if(preis_ausgeben <= 0 && preis_ausgeben >=-30)
		{
		document.getElementById("preis").innerHTML = "0";
		}
    break;
   <?
   }
   ?>
  }

}


</script>

Da wird jedes mal neu gerechnet wenn aus einem der 3 radiogroups ein button angeklickt wird. Wie soll ich das umsetzen?
 
Damit du Ajax einsetzen kannst brauchst du zuerst eine Request-Engine.
Im Web gibts zu diesem Thema unzählige Tutorials. Auch wenn dies den Javascript Teil deutlich komplexer macht, kann ich dir aus eigener Erfahrung sagen, dass sich der Aufwand lohnen wird.

Edit:
Wenn du rausfinden willst, ob ein Radio Button (oder sonst ein Element) angeklickt oder geändert wird, kannst du beim Element ein 'onChange="<Funktion>"' hinzufügen.
Wenn dann das Element verändert (angeklickt) wird, ruft JS die angebene Funktion auf. Um rauszufinden um welches Element es sich handelt, lohnt es sich, auch noch ein Parameter mitzugeben.

Ein Beispiel:

<input type="Radio" id="Anrede1" value="1" onChange="radioButtonChanged('Anrede1')">

D.h. wenn der Button geändert wird, wird im Javascript die Funktion radioButtonChanged() aufgerufen (falls vorhanden) und der Wert "Anrede1" übergeben.
 
Zuletzt bearbeitet:
Das mit onchange hab ich alles schon gemacht. Ich weiß aber nicht wie ich das in php umsetzen soll.
Da müsste ich ja für jeden fall im vorfeld nen wert ausrechnen.
Abgesehen davon in onclick besser weil onchange im IE nicht sofort funktioniert sondern erst nach der nächsten aktion (erneuter klick zum beispiel)
 
Wenn du das ganze mit Ajax machst kannst du den Wert an ein PHP Skript schicken, ihn dort berechnen lassen und dann dem Javascript zurückgeben.
 
Und was is ne Request engine.
Wie muss ich das alles anstellen. Und kann mir jemand nen tutorial link schicken welcher empfehlenswert ist?
 
Zurück
Oben