Seite 1 von 2
RSS ohne allow_fopen_url nutzen - möglich?
Verfasst: Mo 20. Mär 2006, 10:19
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
Re: RSS ohne allow_fopen_url nutzen - möglich?
Verfasst: Mo 20. Mär 2006, 11:55
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
Verfasst: Mo 20. Mär 2006, 15:27
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
Verfasst: Mo 20. Mär 2006, 16:19
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
Verfasst: Fr 12. Mai 2006, 11:58
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

Verfasst: Fr 12. Mai 2006, 12:14
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","");
Verfasst: Fr 12. Mai 2006, 12:18
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)
Verfasst: Fr 12. Mai 2006, 12:22
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.
Verfasst: Fr 12. Mai 2006, 12:59
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?
Verfasst: Fr 12. Mai 2006, 14:35
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;
?>
Verfasst: Fr 12. Mai 2006, 15:12
von rethus
Vielen Dank für den Tip und deine Mühe...
Ich denke das hilft weiter.
Thanx
Verfasst: Do 18. Mai 2006, 19:14
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

Verfasst: Fr 19. Mai 2006, 09:21
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?
Verfasst: Fr 19. Mai 2006, 09:46
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)
und dann kannst du mit der php funktion utf8_decode() wieder den ISO string bekommen.
Verfasst: Mo 22. Mai 2006, 11:56
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?