HTTPSecurityLibrary

    • Release

    Es gibt 50 Antworten in diesem Thema. Der letzte Beitrag () ist von Pinki.

      HTTPSecurityLibrary

      Name des Programms:
      HTTPSecurityLibrary

      Beschreibung:
      Diese Library ist für die sichere Kommunikation zwischen einem VB Programm und einem PHP Script. Dieses wird z.B. benötigt um irgendwelche SQL Datensätze abzufragen, aber man möchte nicht die SQL Verbindungsdaten in das Programm eingeben, da man diese durchs Dekompilieren einsehen könnte oder auch wenn man die Verbindung abghört.

      Wird ein Request gestartet, so generiert meine Library über das DiffieHellmanverfahren einen geheimen Schlüssel. Es werden die benötigten Werte übermittelt, die das Script benötigt um den identischen Schlüssel zu bilden. Jedoch kann ein "Mithörer" mit den Werten nichts anfangen, aber genaueres steht im Wiki Artikel.
      Es wird im Script eine Session gestartet, in die der gemeinsame Schlüssel geschrieben wird und auch die aktuelle IP des abfragers.
      Erst hiernach wird die eigentliche Abfrage gestellt, das Script überprüft die IP und HTTP_USER_AGENT. Sind diese in Ordnung lässt das Script die Abfrage druch und es kommen die Userausgaben.

      Um ein Abfragescript auf dem Server zu schützen muss lediglich eine PHP Includet werden, möglichst ganz zu beginn des Scripts. Danach wird der weitere Inhalt des Scripts nur freigegeben, wenn alle Parameter der Anfrage erfüllt sind.

      Edit: Die Daten die Zurückgegeben werden, sind natürlich Verschlüsselt, also kann ein Mithörer nichts damit anfangen, selbst mit dem Key nicht.

      Screenshot:
      - keiner -

      Beispiel:
      Zuerst die DLL in die Verweise unter "MyProject" hinzufügen. Danach den Import ganz zu beginn des Codes nicht vergessen
      Benötigt wird:
      - Button1
      - TextBox1 (MultiLine, ScrollBar)

      VB.NET-Quellcode

      1. Imports HTTPSecurityLibrary
      2. Public Class Form1
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      4. Dim request As New HTTPSecurityRequest
      5. Dim col As New PostCollection
      6. col.Add("query", "SELECT * FROM `sys_user` ORDER BY `id` ASC")
      7. col.Add("version", "1.0")
      8. TextBox1.Text = request.Create("http://localhost/vb/query.php", col).Replace(vbLf, vbNewLine)
      9. End Sub
      10. End Class


      Das PHP Script:
      query.php

      PHP-Quellcode

      1. <?php
      2. include("dnp_request.php");
      3. mysql_connect("localhost", "root", "");
      4. mysql_select_db("test");
      5. $query = mysql_query($_POST['query']);
      6. while($row = mysql_fetch_object($query)) {
      7. $request->AppendLine($row->username." - ".$row->userimage);
      8. }
      9. $request->Append("Version: ".$_POST['version']);
      10. $request->display();
      11. ?>


      Damit die Daten verschlüsselt werden müssen die Funktionen $request-Append(Text As String); oder $request->AppendLine(Text As String); verwendet werden. Sind alle Daten eingefügt, so wird die Ausgabe, natürlich ganz am Ende des Scripts mit $request->display(); gestartet.

      Man kann seinem Script natürlich noch alle möglichen anderen Variablen via POST übergeben und im Script drauf zugreifen, die einzigen variablen, die NICHT deklariert werden dürfen sind 'request_action' und 'request_sid' da dieses Systemvariablen zur Herstellung der Verbindung sind.
      Zudem sollte selbstverständlich NICHT im Script dnp_request.php rumgefummelt werden, da dieses genau auf die Abfrage abgestimmt ist.


      Verwendete Programmiersprache:
      Visual Basic 2008

      Systemanforderungen:
      .NET Framework 3.5

      Download:
      HttpSecurityLibrary (10 KB / 24KB)

      Lizenz/Weitergabe:
      Freeware

      Updates:
      - (29.07.09): Es wird jetzt das DiffieHellman-Schlüsselaustausch-Verfahren genutzt um einen gemeinsamen Schlüssel zu erzeugen, mit dem man den Response wieder entschlüsseln kann!

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Dodo“ ()

      also ich finds geil, aber wie kann ich den request dann auslesen?

      Edit: ach ja nen error:
      Ungültige Konvertierung von der Zeichenfolge <!DOCTYPE HTML PUBLIC "-//W3C//D in Typ Long.

      bei textbox.text = ...


      Edit by Chrisber: Beiträge zusammengefügt.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Chrisber“ ()

      Hallo,
      erstmal sehr sehr gutes Library ist echt super nützlich :)


      wenn ich mit den befehl col.Add("query", "SELECT `Gold` FROM `handel`") auslese dann kommt folgendes ..

      -
      -
      -
      -
      Version: 1.0


      ich meine die anzahl stimmt ja von den einträgen nur warum bekomme ich dessen einträge nicht ?

      Lg. Virus
      Imperiums - Fortschritt in ein neues Zeitalter (Remake 2021)
      Ist ein eigener Algorithmus, weil ich keine gemeinsamen Verschlüsselungsverfahren für VB und PHP gefunden habe, die ohne weiteres auf jedem Server vorhanden ist.

      Wie sicher die ist weiß ich nicht genau, aber ohne des Schlüssels kommt man glaube ich nicht soleicht drauf. Natürlich wer dran will, viel Zeit hat könnte es ggf. schaffen, aber so ist das ja bei jeder Verschlüsselung.
      Das für das Deffie-Hellman Verfahren, dort werden vom Server 3 Zahlen ausgetauscht, eine Primzahl und eine Base Zahl aus denen der gemeinsame Schlüssel gebildet wird. Der Client kann hierraus und aus einer eigenen Zufallszahl den gemeinsamen Schlüssel berechnen.
      öhm ich glaube ich habe 100000 genommen. Bei größeren Werten kam es zu fehlern, das der Gemeinsame Schlüssel nicht identisch war, warum es so ist habe ich noch nicht rausgefunden. Bei Deffie Hellman steht ja das Primzahlen genommen werden und als Base Primwurzeln und habe mir da auch entsprechende Routinen geschrieben die mir solche Zahlen berechnen, aber das dauert zulange, gerade in PHP und deswegen habe ichs einfach mit Random Zahlen versucht und es klappt einwandfrei.

      Das PHP Script ist ja frei zugänglich, wenn PHP kannst wirste ja da das System sehen und verstehen denke ich, ist im prinzip relativ simpel. Auch der Verschlüsselungsalgorithmus ist einfaches XOR des Gemeinsamen Schlüssels.
      Na klar, ich habe das hierbei jedoch vergessen ^^ werde es aber noch integrieren.

      Du machst ja zuerst ein Request um den gemeinsamen Schlüssel zu bekommen. Danach kannst du natürlich auch die POST Daten verschlüsseln, jedoch natürlich NUR die Werte, nicht die Variablen, weil ansonsten der PHP Parser diese natürlich nicht erkennen kann.