Java über php datei lesen?

Status
Nicht offen für weitere Antworten.

lovestern26

Mitglied
Hy Leute,
ich wollte mal fragen wie kann Java von eine php datei lesen?
Ich habe leider in google nichts darüber gefunden.
Ich wollte es so machen von Java ChatClient über eine php datei in die datenbank einlesen lassen und einträge tätigen.
Ist so etwas möglich?

Bitte um Hilfe.

Ich bedanke mich schon im voraus.
 
Die wohl einfachste Variante ist einen HTTP Request an das PHP Script zu senden. Der einfachheit halber würde ich zu einer GET-Anfrage Tendieren.


mfg
Aradiv
 
Die wohl einfachste Variante ist einen HTTP Request an das PHP Script zu senden. Der einfachheit halber würde ich zu einer GET-Anfrage Tendieren.


mfg
Aradiv

Vielen dank für deine antwort
aber ich wollte es so mach über php sollte nur eine mySQL datenbankverbindung hergestellt werden und über den Java ChatClient zu chatten. Damit wollte ich vermeiden einen Chatserver zu programmieren.
 
Zufälligerweise habe ich gerade letztlich genau diese PHP<->Java Kommunikation programmiert 🙂
Das Php-Programm zum lesen der Datei (etwa so):
Code:
<?php 
mysql_connect("localhost","username","passwort") or die("Keine Verbindung möglich");

mysql_select_db("Datenbank") or die("Die Datenbank existiert nicht");

$query = "SELECT * FROM `daten` ... ";
$result = mysql_query($query);

$num = mysql_numrows($result);

$i=0;
while ($i < $num) {
	echo mysql_result($result,$i,"Spalte1").";";
	$i++;
}
?>
Mit diesem Skript kannst du die Datenbank auslesen und in irgendeiner Form ausdrucken.

Folgende Java-Methode liesst diese Daten ein
Java:
public void download() {
	try {
		URL url = new URL( "http://www.webseite.ch/read.php");
		Scanner scanner = new Scanner( url.openStream() ).useDelimiter( "\n" );
		while(scanner.hasNext()) {
	       		String line = scanner.next();
	       		System.out.println(line);
	    	}
	} catch (Exception e) {
		e.printStackTrace();
	}
}


Schwieriger ist es, Daten zu senden. Du könntest das mit get-Variabeln machen. Das sind die Einträge in der URL hinter dem "?". Folgendes php-Skript liesst diese Variabeln und fügt sie in die Datenbank:
Code:
<?php
mysql_connect("localhost","username","passwort") or die("Keine Verbindung möglich");

mysql_select_db("Datenbank") or die("Die Datenbank existiert nicht");

$spalte1= $_GET["spalte1"];

$query = "INSERT INTO `daten` ( `spalte1` , ... ) VALUES ('".$spalte1."', ... );";

mysql_query($query);
?>

Und mit folgender Java-Methode kannst du dem Php-Skript Daten zukommenlassen. 123 in Spalte1, 456 in Spalte 2:
Java:
public void upload() {
	try {
		String entry  = "http://www.webseite.ch/write.php?spalte1=123&spalte2=456";
		URL u = new URL(entry);
		u.openStream(); // vielleicht gibt es hier auch eine Alternative dazu
	} catch (Exception e) {
		e.printStackTrace();
	}
}

Falls jemand einen Fehler oder eine Gefahr sieht, bitte posten, hilft mir selber auch weiter 🙂
 
Zuletzt bearbeitet:
$spalte1= $_GET["spalte1"];

$query = "INSERT INTO `daten` ( `spalte1` , ... ) VALUES ('".$spalte1."', ... );";
GEFAAAAHR ;-) Niemals nicht ohne Überprüfung und vor allem Escaping Werte, die vom Benutzer geliefert werden in ein SQL-Statement einbauen...
Stell dir vor, jemand baut so eine URL (bin da kein Experte, aber das Prinzip sollte passen):
Code:
h ttp://example.com/page.php?spalte1='); drop table daten;

dann wird deine Tabelle "daten" gelöscht (was noch harmlos ist eigentlich).

Suchmaschine anwerfen zum Stichwort "sql injection" und du wirst wahrscheinlich erschrecken was möglich ist 🙂
 
GEFAAAAHR ;-) Niemals nicht ohne Überprüfung und vor allem Escaping Werte, die vom Benutzer geliefert werden in ein SQL-Statement einbauen...
Stell dir vor, jemand baut so eine URL (bin da kein Experte, aber das Prinzip sollte passen):
Code:
h ttp://example.com/page.php?spalte1='); drop table daten;

dann wird deine Tabelle "daten" gelöscht (was noch harmlos ist eigentlich).

Suchmaschine anwerfen zum Stichwort "sql injection" und du wirst wahrscheinlich erschrecken was möglich ist 🙂

Ich bedanke mich bei euch für eure Hilfe ich werde es ausprobieren und auch nach "sql injection" googlen.
Mfg
 
Vielen Dank für die Bemerkung, hätte ich erwähnen sollen. Das sollte das php-Skript auf jeden Fall überprüfen. Ich habe dazu die Befehle [c]strip_tags[/c] (für HTML Tags) und [c]mysql_real_escape_string[/c] (für MYSQL-Befehle) gefunden, aber noch nicht eingebaut.
Ob diese zwei Befehle schon reichen und alles Böse abdecken?
 
Wie gesagt bin ich da kein Experte, aber es schadet nie, die Techniken potentieller Angreifer zu studieren. Für PHP existieren viele Beispiele, was man tun und lassen sollte.
Code:
mysql_real_escape_string
sollte die meisten injections abfangen aber ganz sicher wird das auch nicht sein vermutlich.

Auch ganz interessant sind Seiten wie :: Happy-Security :: - Hackits, Challenges, Tutorials oder http://www.hackthissite.org/
Macht Spaß und man lernt noch was zum Thema Sicherheit.
 
Wie gesagt bin ich da kein Experte, aber es schadet nie, die Techniken potentieller Angreifer zu studieren. Für PHP existieren viele Beispiele, was man tun und lassen sollte.
Code:
mysql_real_escape_string
sollte die meisten injections abfangen aber ganz sicher wird das auch nicht sein vermutlich.

Auch ganz interessant sind Seiten wie :: Happy-Security :: - Hackits, Challenges, Tutorials oder http://www.hackthissite.org/
Macht Spaß und man lernt noch was zum Thema Sicherheit.

Ok werde ich mir ansehen. Ja Thema Sicherheit spiel ein sehr große Roll.
Danke euch.
Mfg
 
Vielleicht lohnt auch ein Blick auf das hier: https://jpmdbc.dev.java.net/

Hab ich während meiner Diplomarbeit so nebenher mal gebastelt...
Die JDBC Schnittstelle ist zwar nicht zu 100% ausimplementiert (die Meta-Klassen fehlen), aber für das "übliche" sollte es reichen.

- Alex
 
Vielleicht lohnt auch ein Blick auf das hier: https://jpmdbc.dev.java.net/

Hab ich während meiner Diplomarbeit so nebenher mal gebastelt...
Die JDBC Schnittstelle ist zwar nicht zu 100% ausimplementiert (die Meta-Klassen fehlen), aber für das "übliche" sollte es reichen.

- Alex

Vielen dank. naja ich weiß nicht so genau wie man das mit JDBC verbindung aufbaut bzw. den treiber dafür installiert auf den server ich habe einen v-Server mit dem betriebsystem Debian 4 drauf......
🙁
 
Ich kann madboy nur beipflichten... die Seite wäre in 2 Minuten matsch oder ein potentieller Angreifer hätte sie sich in dieser Zeit auch gemailt (Ich meine den PHP-Quellcode und nicht das was dabei heraus kommt. Ausserdem: ungefiltertes write über GET ohne Verzeichnisschutz? Was ist denn, wenn jemand schlicht die Links abfängt? der kann in die DB schreiben, was er will. Hier mal ne simple HTTP-Authentifikation (Base64-Encoded).
Java:
URL u = new URL("http://some.url");
String auth = "user:password";
char[] cdecoded = auth.toCharArray();
byte[] bdecoded = new byte[cdecoded.length];
int n;
for(n = 0; n < bdecoded.length; n++) {
	bdecoded[n] = (byte) cdecoded[n];
}
auth = "BASIC " + Base64.encode(bdecoded);
URLConnection uc = u.openConnection();
uc.addRequestProperty("Authorization", auth);
InputStream in = uc.getInputStream();
Ich hoffe du weisst, wie man diesen Verzeichnisschutz erstellt.
@Edit: Und dann noch das was tuxedo schreibt (von wegen SSL und so...), dann sollte jut sein...
 
Zuletzt bearbeitet von einem Moderator:
Ich kann madboy nur beipflichten... die Seite wäre in 2 Minuten matsch oder ein potentieller Angreifer hätte sie sich in dieser Zeit auch gemailt (Ich meine den PHP-Quellcode und nicht das was dabei heraus kommt. Ausserdem: ungefiltertes write über GET ohne Verzeichnisschutz? Was ist denn, wenn jemand schlicht die Links abfängt? der kann in die DB schreiben, was er will. Hier mal ne simple HTTP-Authentifikation (Base64-Encoded).
Java:
URL u = new URL("http://some.url");
String auth = "user:password";
char[] cdecoded = auth.toCharArray();
byte[] bdecoded = new byte[cdecoded.length];
int n;
for(n = 0; n < bdecoded.length; n++) {
	bdecoded[n] = (byte) cdecoded[n];
}
auth = "BASIC " + Base64.encode(bdecoded);
URLConnection uc = u.openConnection();
uc.addRequestProperty("Authorization", auth);
InputStream in = uc.getInputStream();
Ich hoffe du weisst, wie man diesen Verzeichnisschutz erstellt.
@Edit: Und dann noch das was tuxedo schreibt (von wegen SSL und so...), dann sollte jut sein...
Danke euch nochmal.
 
Du hast dafür das Passwort im Java-Code. Das ist ja nullkommanichts geknackt und dann hat der Angreifer Zugriff auf die gesamte Datenbank. Natürlich kann bei meiner Methode jeder Einträge in die Datenbank machen, aber immerhin ist das Php-Skript im Stande gewisse gefährliche Einträge abzufangen. Somit besteht zumindeste in minimaler Schutz. Und wie das ganze noch sicherer gehen könnte, wüsste ich nicht.
Selbst wenn du das Passwort auf irgendeine geniale Weise obfuskierst, wird ein nicht vernachlässigbares Restrisiko bestehen, dass es rekonstruiert werden kann.
 
Dem kann ich nur zustimmen. Bei JPMDBC ist das das gleiche Problem: Das Passwort sollte nicht hardcodiert sein, sondern vom User eingegeben werden. Ansonsten ist das ganze vergleichbar mit einer phpMyAdmin-Installation der das Passwort beiliegt und direkt im Login-Screen mit angezeigt wird 🙂

- Alex
 
Mal langsam Kollegen... wo hätte ich es denn im Beispiel hinschreiben sollen? in einen anderen Thread? 😀 Naja... ihr habt ja recht. Hätte ich vllt. drauf hinweisen sollen.
Auf was man allerdings noch hinweisen sollte, ist, das bei der BASIC-Authentification, das PW nahezu im "Klartext" (nur Base64 encoded) übermittelt wird, und es ein leichtes ist das zu bekommen. Besser wäre dafür DAA geeignet. Aber die wird afaik nicht von jedem Server unterstützt. Ausserdem hab' ich das in Java auch noch nicht gemacht, weil, es bestand kein bedarf.
 
Naja, wenn dann SSL kombiniert mit "Passwort nicht im Quellcode speichern oder hardcodieren" ...

Alternativ kann man auch die Statements auf PHP Seite hardcodieren, ebenso das Passwort etc. Dann kann man von Java aus nur noch die Parameter für die Statements übergeben. Allerdings schränkt das die flexibilität etwas ein. Für "Spezialanwendungen" sollte das aber nicht so das Problem sein.

- Alex
 
Naja, wenn dann SSL kombiniert mit "Passwort nicht im Quellcode speichern oder hardcodieren" ...

Alternativ kann man auch die Statements auf PHP Seite hardcodieren, ebenso das Passwort etc. Dann kann man von Java aus nur noch die Parameter für die Statements übergeben. Allerdings schränkt das die flexibilität etwas ein. Für "Spezialanwendungen" sollte das aber nicht so das Problem sein.

- Alex

Ich möchte an alle mein besten dank aus sprechen.
Schaut nicht sehr einfach aus das ganze. xD
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben