RSS ohne allow_fopen_url nutzen - möglich?

clipboard
Beiträge: 41
Registriert: Sa 29. Mai 2004, 11:14
Kontaktdaten:

RSS ohne allow_fopen_url nutzen - möglich?

Beitrag von clipboard »

Hallo

Ich verwende Contenido 4.6.8. Ich nutze bis jetzt ein RSS-Feed von Golem.
Aus bekannten Sicherheitslücken, habe ich unter anderem in der php.in "allow_fopen_url" auf "off" gestellt.
Nun geht der RSS Import nicht mehr. Schalte ich wieder auf "on" klappert er wieder.

Gibts eine Möglichkeit das auch mit dem Schalter "off" trotzdem zu verwenden?

Gruss
Fabian
xmurrix
Beiträge: 3215
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 17 Mal
Kontaktdaten:

Re: RSS ohne allow_fopen_url nutzen - möglich?

Beitrag von xmurrix »

clipboard hat geschrieben:...
Aus bekannten Sicherheitslücken, habe ich unter anderem in der php.in "allow_fopen_url" auf "off" gestellt.
Nun geht der RSS Import nicht mehr. Schalte ich wieder auf "on" klappert er wieder.

Gibts eine Möglichkeit das auch mit dem Schalter "off" trotzdem zu verwenden?...
Hallo clipboard,

über fsockopen http://de.php.net/manual/de/function.fsockopen.php kannst du eine Socket-Verbindung aufbauen und RSS-Feeds auslesen, auch wenn "allow_fopen_url" auf "off" gesetzt ist.

Gruß
xmurrix
clipboard
Beiträge: 41
Registriert: Sa 29. Mai 2004, 11:14
Kontaktdaten:

Beitrag von clipboard »

Danke für den Tipp. Da ich von PHP (und auch andere Sprachen) keine Ahnung habe, bin ich nicht in der Lage das in Contenido umzusetzen. Vielleicht hat das schon jemand gemacht?

Gruss
Fabian
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

da gibts sogar eine contenido eigene funktion die das macht:

Code: Alles auswählen

$rssinhalt = sendPostRequest("www.egal.de","verzeichnis/datei.xml","");
sollte dir den inhalt der datei.xml in die variable $rssinhalt einlesen. ansonsten gibt es hier ein paar schöne beispiele für die anwendung:
http://de.php.net/fsockopen
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

stese hat geschrieben:da gibts sogar eine contenido eigene funktion die das macht:

Code: Alles auswählen

$rssinhalt = sendPostRequest("www.egal.de","verzeichnis/datei.xml","");
sollte dir den inhalt der datei.xml in die variable $rssinhalt einlesen. ansonsten gibt es hier ein paar schöne beispiele für die anwendung:
http://de.php.net/fsockopen
Interessant, aber wie genau nuzt man diese Funktion?
Ich habe nun folgendes im Code des Moduls geändert...

Code: Alles auswählen

   $sFeed = sendPostRequest("www.presseportal.de","rss/dienststelle_10374.rss2","");
  #$sFeed = "http://www.presseportal.de/rss/dienststelle_10374.rss2";
Aber es funktioniert noch nicht :-(
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Ein wichtiger Hinweis schon mal:

Der Slash vor dem zweiten Parameter ist wichtig, da ansonsten ein BadRequest vom angesprochenen Server zurückkommt.
Also so:

Code: Alles auswählen

$sFeed = sendPostRequest("www.presseportal.de","[b]/[/b]rss/dienststelle_10374.rss2","");
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

als serveradmin kann man für bestimmte dateien die verarbeitung bei bestimmten request methoden nicht zulassen - gerade bei dateien oder verzeichnissen, die niemals dafür gedacht worden post daten zu verarbeiten, zumal noch ohne referer (wie bei dir angegeben) deaktiviere ich die funktionen auch auf meinem server.

wenn es also nicht funktioniert, nutze bitte die fsockopen funktion von php (wenn du dir die sendPostData funktion anschaust, wirst du sehen, dass das nix anderes als ne funktion für die aufbereitung der daten für fsockopen ist, in der man allerdings nicht bestimmen kann, ob die daten nun per get oder post gesandt werden)
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

rethus hat geschrieben:Ein wichtiger Hinweis schon mal:

Der Slash vor dem zweiten Parameter ist wichtig, da ansonsten ein BadRequest vom angesprochenen Server zurückkommt.
Also so:
ja, das muss man auch bei der normalen fsockopen funktion machen.
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Danke schon mal...
Das mit dem Slash habe ich an dieser Stelle nur erwähnt, weil es in deinem Posting nicht so angegeben war... dort stand nur "verzeichnis/datei.xml"... und damit diejenigen die in gleicher Sache ne Lösung suchen, sich nciht mit kleinigkeiten rumschlagen müssen, habe ich es hier gepostet.

So, nun habe ich folgende Ausgabe, wenn ich die besagte Methode nutze:

Code: Alles auswählen

HTTP/1.1 200 OK
Date: Fri, 12 May 2006 11:56:48 GMT
Server: Apache
X-Powered-By: PHP/4.4.1
Connection: close
Transfer-Encoding: chunked
Content-Type: application/xml; charset=ISO-8859-1

3800
<?xml version="1.0" encoding="ISO-8859-1"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
		<channel>
			<title>Polizeipresse.de - Polizeipressestelle Rhein-Erft-Kreis</title> usw...
Ich vermute, das er nun ein Problem damit hat, das die fsocket..Funktion erst den Status zurückgibt:

Code: Alles auswählen

HTTP/1.1 200 OK
Date: Fri, 12 May 2006 11:56:48 GMT
Server: Apache
X-Powered-By: PHP/4.4.1
Connection: close
Transfer-Encoding: chunked
Content-Type: application/xml; charset=ISO-8859-1
Gibts ne Möglichkeit, den rauszuschneiden, oder besser noch direkt beim Aufruf zu blocken?
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

jap.

der header und der content werden durch eine leerzeile abgetrennt. das funktioniert:

Code: Alles auswählen

<?php

// hole komplette daten
$res = sendPostRequest("www.hostblogger.de", "/blog/feeds/index.rss2","");

// header und inhalt trennen
list($strHeader, $strContent) = explode("\r\n\r\n", $res, 2);

// entferne erste zeile - komisches zeichen
list($strAbfall, $strContent) = split("[\r\n]", $strContent, 2);

// entferne letzte zeile - eine zahl
$arr = split("[\r\n]", trim($strContent));
array_pop($arr);
$strContent = implode("\r\n",$arr);
$strContent = trim($strContent);
unset($arr, $strAbfall, $res);

print $strContent;
?>
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Vielen Dank für den Tip und deine Mühe...
Ich denke das hilft weiter.

Thanx
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

So, jetzt geht es bei mir auch ohne allow_url_fopen...
Ich habe das Modul so umgeschrieben, das nun automatisch getestet wird, ob die option aktiviert,oder deaktiviert ist.

Dementsprechend arbeitet das Modul dann. Als nächstes werde ich wohl noch eine Cache-Funktion in das Modul inkludieren... Ein Ansatz habe ich durch den Umbau schon...

Danke nochmal für die Hilfe :wink:
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Hab da nochmal eine Frage...
Ich habe nun dieses Modul diversen Containern zugeordnet (auf der gleichen Seite)...

Nun stellt sich das Problem, das der eine RSS-Feed in ISO8859-1 und der andere in UTF-8 zurückgegeben wird.
Ihr könnt euch vorstellen, was das für ein Buchstabensalat gibt.

Wie kann ich das Problem umgehen?

Kann ich im Quellcode festlegen, das der eine Bereich UTF-8 Codiert ist, und der andere ISO8859-1?
stese
Beiträge: 1040
Registriert: Fr 3. Dez 2004, 17:47
Wohnort: München
Kontaktdaten:

Beitrag von stese »

nein das nicht, das charset wird im header der aufgerufenen seite festgelegt - das ist einmalig, aber du kannst theoretisch checken ob der rss utf8 ist (steht im übergebenen header)

Code: Alles auswählen

Content-Type: text/xml; charset=utf-8
und dann kannst du mit der php funktion utf8_decode() wieder den ISO string bekommen.
rethus
Beiträge: 1851
Registriert: Di 28. Mär 2006, 11:55
Wohnort: Mönchengladbach
Kontaktdaten:

Beitrag von rethus »

Ok, hab es soweit hinbekommen.
Moch würde nun noch interessieren, wie ich Contenido sage, welchen Zeichensatz er für die Seiten nehmen soll.

Gibt es da irgendwo eine Einstellungsmöglichkeit im Adminbereich?

Oder muss man das irgendwo hart Codieren?

Gibts ne Variable wo ich abfragenkann, wie der aktuelle Zeichensatz lautet, den Contenido derzeit nutzt?
Gesperrt