# Includes zu anderen Domains erlauben



## mrairbrush (27. März 2010)

Ich habe das Problem das ich ein anderes php Script von einer anderen Domain auf dem gleichen Server erlauben will. Die Sicherheitseinstellungen lassen es aber offensichtlich nicht zu. Wie kann ich das ändern das php Scrips von dem gelichen Server included werden dürfen.
Safe Mode off für einzelne Domains habe ich gefunden aber hier weiß ich nicht wo, was zu ändern ist.


----------



## Till (29. März 2010)

Benutzt Du ispconfig? Wenn ja, welche Version?


----------



## mrairbrush (31. März 2010)

Ja benutze ISP Config. Sollte neuste VErsion sein da ich gerade erst update gemacht habe.


----------



## Till (31. März 2010)

Es gibt 2 neueste Versionen, 2.2.35 und 3.0.2.1. Hast Du also ISPConfig 2 oder 3 installiert?


----------



## mrairbrush (29. Apr. 2010)

benutze 
3.0.21


----------



## Till (29. Apr. 2010)

Dann kannst Du den Pfad zu der anderen Website unter Optionen im OpenBasedir Feld hinzufügen. Mehere Pfaede werden durch : getrennt.


----------



## mrairbrush (22. Juni 2010)

ist dann ein zusätzlicher oder ein genereller Eintrag? Damit meine ich sind die includes innerhalb einer Domain immer frei oder muss ich die dann alle dazuschreiben?
Welche Domain von welcher includen darf?


----------



## mrairbrush (22. Juni 2010)

include() [function.include]:  URL file-access is disabled in the server configuration in

eine Änderung in der php_ini

safe_mode_include_dir = /var/www/clients/client3/web4/web:/var/www/clients/client1/web6/web
und
open_basedir =  /var/www/clients/client3/web4/web:/var/www/clients/client1/web6/web


brachte auch nichts

Hängt das mit safe_mode_gid =  zusammen?


----------



## Till (22. Juni 2010)

URL access hat aber nichts mit open vbasedir zu tun, sondern mit dem URL access. Heißt glaube ich url fopen wrapper oder so in der php.ini.

Diese Funktion ist aber sicherheitstechnisch etwas heikel, da sie beim kleinsten Fehler in einem der PHP scripte das Nachladen von externem Schadcode ermöglicht. Du solltest Dir also nochmal überlegen ob Du das wirklich machen willst.


----------



## mrairbrush (24. Nov. 2010)

Welche Möglichkeit habe ich um ein script von Domain A auf Domain B aufzurufen?
Oder gibt es eine generelle Möglichkeit das Scripte Serverbezogen aufzurufen sind. Dann wäre das nachladen von ausserhalb ja nicht möglich.


----------



## Till (24. Nov. 2010)

Schau mal in der php Doku unter "include" nach.


----------



## mrairbrush (24. Nov. 2010)

Habe ich gerade gemacht, bisher aber keine Lösung gefunden.


----------



## Till (24. Nov. 2010)

Was genau willst Du denn includen? Eine externe URL oder eine lokale Datei und soll dann der Inhalt als PHP code interpretiert werden oder aber z.b. als html oder xml Content verwendet werden?


----------



## mrairbrush (15. Okt. 2011)

Nur eine php Datei auf einer anderen Domain (gleicher Server) aufrufen.
Gibt es keine Einstellungen die das explizit von Domains auf den selben Server z.b. über die IP zuläßt? Das wäre die einfachste Lösung.


----------



## nowayback (16. Okt. 2011)

Moinsen,

evtl hilft dir das:

```
$remotefile = "http://www.path.to/filename.php";

$fh = fopen($remotefile, 'r'); 
$inhalt = fread($fh, filesize($remotefile)); 
fclose($fh); 

echo $inhalt;
```
PHP: fopen - Manual

Grüße
nwb


----------



## mrairbrush (18. Okt. 2011)

Es scheitert schon an fopen oder basedir aufgrund der Sicherheitseinstellungen. Aber so wie ich mitbekommen habe kann man etwas in der phpini ändern das es zu bestimmten Domains erlaubt ist. Ich möchte jetzt aber nicht eine Domain eintragen (was bisher auch scheiterte) sondern einfach die Serverip. Nur wie?


----------



## nowayback (18. Okt. 2011)

Zitat von mrairbrush:


> Es scheitert schon an fopen oder basedir aufgrund der Sicherheitseinstellungen. Aber so wie ich mitbekommen habe kann man etwas in der phpini ändern das es zu bestimmten Domains erlaubt ist. Ich möchte jetzt aber nicht eine Domain eintragen (was bisher auch scheiterte) sondern einfach die Serverip. Nur wie?


Moinsen,

Das erlauben auf eine bestimmte IP macht überhaupt keinen Sinn, denn unter dieser IP können ja mehrere Websites gehostet werden und den Pfad zu den Websites legt dein Webserver fest. Aber ich drück mal deine Nase direkt da drauf: *open_basedir*

Du hast ja gesagt, dass das Script auf dem selben Server liegt, also sollte das funktionieren.

Im ISP Config kannste bei PHP open_basedir in Domains direkt den Pfad mit eintragen zum anderen Verzeichnis in dem das Script liegt. 



Grüße
nwb


----------



## mrairbrush (18. Okt. 2011)

Nun unter der IP sind nur meine Webseiten gehostet.
Meinst Du unter ISP Config den Punkt System/Serverconfiguration/web/php open_basedir ?
Da steht eine lange Zeichenkette drin

[website_path]/web:[website_path]/tmp:/var/www/[website_domain]/web:/srv/www/[website_domain]/web:/usr/share/php5:/tmp:/usr/share/phpmyadmin
Muss da was geändert werden?


----------



## mrairbrush (18. Okt. 2011)

Zitat von nowayback:


> Moinsen,
> 
> evtl hilft dir das:
> 
> ...


Da kriege ich noch mehr Fehler.


----------



## nowayback (18. Okt. 2011)

Zitat von mrairbrush:


> Nun unter der IP sind nur meine Webseiten gehostet.
> Meinst Du unter ISP Config den Punkt System/Serverconfiguration/web/php open_basedir ?
> Da steht eine lange Zeichenkette drin
> 
> ...


1. ISP Config als Admin einloggen
2. Klicke auf Domains
3. Klicke auf die Domain, die das Script von der anderen laden soll
4. Klicke auf Optionen
5. Trage bei PHP open_basedir den Pfad zu dem Verzeichnis ein, indem das Script liegt
6. Klicke auf Speichern
7. Warte 1 Minute bis ISP Config das übernommen hat
8. Teste dein Script
9. Logge dich wieder aus



> Da kriege ich noch mehr Fehler.


Es ist immer sehr hilfreich zu verschweigen wie die Fehlermeldungen lauten, denn nur so können die Leute, die versuchen wollen dir zu helfen, auch mal ihre Glaskugel benutzen. Leider ist meine gerade zur Politur. Gerne lass ich dich wissen wenn ich diese zurück habe.

Solltest du Ironie in diesem Post finden, dann könnte diese beabsichtigt sein 

Grüße
nwb


----------



## mrairbrush (19. Okt. 2011)

Geht auch nicht.



> *Warning*:  include() [function.include]: URL file-access is disabled in the server configuration in */var/www/clients/client1/web6/web/domain/modules/mod_werbung.php* on line *16*
> 
> *Warning*:  include(http://domain.com/whats_new_galerie.php) [function.include]: failed to open stream: no suitable wrapper could be found in */var/www/clients/client1/web6/web/domain/modules/mod_werbung.php* on line *16*
> 
> *Warning*:  include() [function.include]:  Failed opening 'http://domain.com/whats_new_galerie.php' for  inclusion (include_path='.:/usr/share/php:/usr/share/pear') in */var/www/clients/client1/web6/web/domain/modules/mod_werbung.php* on line *16*


Das script lautet:



> <?php
> // $Id: mod_newmodule.php,v 1.0 2004/04/18 15:23:20 sgabardi Exp $
> /**
> * Newmodule
> ...


----------



## mrairbrush (19. Okt. 2011)

Wenn ich in der php.ini

;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = ON

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
allow_url_include = ON


Setze dann funktioniert es, aber das soll ja ein Sicherheitsrisiko sein.


----------



## nowayback (19. Okt. 2011)

Moinsen,

vielen Dank für die Fehlermeldung. Damit kann man doch arbeiten. Es gibt für dich 2 Möglichkeiten die mir spontan einfallen:



> include(http://domain.com/whats_new_galerie.php)


 kann nicht funktionieren, da du die domain und nicht den Pfad angegeben hast der included werden soll. Der Pfad sollte sowas in der Art sein: /var/www/clients/client1/web6/web/domain/modules/name.php

Möglichkeit nur 2: Dort wo du den Pfad angegeben hast, kannst du unten drunter in das große weiße Feld "Custom php.ini Settings" etwas eintragen. Trage dort bitte: "allow_url_include = On" ein.

Danach speichern und die obligatorische Minute warten. Dann testen. 

Hinweis: Bitte prüfe, wenn du Möglichkeit 2 anwendest, zukünftig alle deine Scripts die du hochlädst sehr genau, denn damit ist es möglich Schadcode von einer anderen Webseite runterzuladen die du dann im schlimmsten Fall weiterverbreiten könntest.


*** Edit ***


> Wenn ich in der php.ini
> 
> ;;;;;;;;;;;;;;;;;;
> ; Fopen wrappers ;
> ...


Hab gerade gesehen das wir zur selben Zeit gepostet haben. Dein Vorgehen ändert die Standart Einstellungen für alle Domains. Die Möglichkeit 2 die ich oben gepostet habe, sollte nur die Vorgaben für die entsprechende Domain ändern, ist aber sonst das gleiche Prinzip.

Grüße
nwb


----------



## Till (19. Okt. 2011)

Ich weiß ja nicht was genau Du mit dem Include vorhast, daher ein wichtiger Hinweis: ein Include auf http://.... in PHP included immer die Ausgabe der Datei whats_new_galerie.php und nicht den Sourcecode der Datei whats_new_galerie.php, wenn in der Webseite domain.com PHP aktiviert ist.

Also wenn die Datei whats_new_galerie.php z.B. folgendes enthält:

<?php
echo "Hallo";
?>

dann included ein include(http://domain.com/whats_new_galerie.php) einfach nur:

Hallo

wähernd ein include(/var/www/domain.com/web/whats_new_galerie.php) folgendes includen würde:

<?php
echo "Hallo";
?>


----------



## mrairbrush (19. Okt. 2011)

Das Teil macht nix anders als neuste Bilder anzuzeigen und einen Link zum Ursprung zu setzen. Wieso gibt es keine Möglichkeit includes innerhalb aller domains die auf einem Server (über die IP z.B.) liegen zuzulassen und nur die von aussen zu ignorieren.  Das wäre am einfachsten.
Ich probiere das mal so. 
Mir ist bei ISP etwas aufgefallen. An das Feld Settings kam ich nur weil ich in dem Feld bei traffic Quota etwas anderes als 0 eingetragen habe, ansonsten sind die Felder Settings/Umleitungen/ssl/Statistiken nicht erreichbar. Kriege eine Fehlermeldung das dort ein Wert stehen muss.
Was muss eigentlich bei Settings openbasedir in der Zeile stehen? Muss da überhaupt etwas rein? Nur für die betreffende Domain oder auch für eine weitere??

Ich habe unter Settings nur ein Feld das sich Apache Direktiven heißt. Dort habe ich mal beide Werte eingetragen. Also
allow_url_include = ON
allow_url_fopen = ON
Fehlermeldung bleibt.
Und als ich Apache neu starten wollte ging das nicht weil ein syntax error kommt.





> -bash: etc/init.d/apache2: Datei oder Verzeichnis nicht gefunden
> apt:~# /etc/init.d/apache2 restart
> Restarting web server: apache2We failed to correctly shutdown apache, so we're now killing all running apache processes. This is almost certainly suboptimal, so               please make sure your system is working as you'd expect now! (warning).
> ... waiting .Syntax error on line 68 of /etc/apache2/sites-enabled/domain.com.vhost:
> ...


----------



## Till (19. Okt. 2011)

> Das Teil macht nix anders als neuste Bilder anzuzeigen und einen Link zum Ursprung zu setzen. Wieso gibt es keine Möglichkeit includes innerhalb aller domains die auf einem Server (über die IP z.B.) liegen zuzulassen und nur die von aussen zu ignorieren.  Das wäre am einfachsten.


Sieh Dir bitte nochmal genau meinen Post an. Wenn das Script html code ausgibt, dann kannst Du es auch garnicht mit include so einbinden.

Ich denke mal dass Du das Problem falsch angehst und hier eigentlich ein programmierfehler vorliegt und kein Konfigurationsproblem. Mal angenommen das Script whats_new_galerie.php gibt html aus und Du möchtest es in Deine Seite einbinden, dann ist include der völlig flasche Befehl. include dient zum einbinden von noch nicht interpretiertem PHP code zur Ausführeung im lokalen script.

Was Du vermutlich haben möchtest, geht so:

readfile('http://domain.com/whats_new_galerie.php');

Zu Deiner Frage warum Du es nicht auf eine IP beschränken kannst musst Du Dich an die PHP Entwickler wenden. Generell sollte man niemails ein URL include machen da es super unsicher, deshalb ist das auch deaktiviert.



> Mir ist bei ISP etwas aufgefallen. An das Feld Settings kam ich nur weil ich in dem Feld bei traffic Quota etwas anderes als 0 eingetragen habe, ansonsten sind die Felder Settings/Umleitungen/ssl/Statistiken nicht erreichbar. Kriege eine Fehlermeldung das dort ein Wert stehen muss.


Das ist ja auch völlig richtig, denn 0 ist kein gültiger Wert. Gültige Werte sind -1 für unlimitiert und ein Wert > 0 wenn Du ein Traffic Limit setzen willst.



> Was muss eigentlich bei Settings openbasedir in der Zeile stehen? Muss da überhaupt etwas rein? Nur für die betreffende Domain oder auch für eine weitere??


Da sollte immer was drin stehen, denn es handelt sich um eine wichtige Sicherheitseinstellung. Die richtigen Werte werden von ispconfig dort automatisch für das web eingetragen, so dass nur der zugriff auf Dateien in diesem web sowie auf das globale include Verzeichnis möglich sind. Benötigt man weitere Verzeichnisse, kann man die ja anfügen. Die einzelnen Felder sind auch alle im ISPConfig Handbuch beschrieben.


----------



## mrairbrush (19. Okt. 2011)

jetzt habe ich ein Problem.
Apache hat sich aufgehängt. Reboot des server gemacht aber apache startet nicht.


l


apt:~# bash: -bash:: command not found
-bash: bash:: command not found
apt:~# apt:~# apt:~# /etc/init.d/apache2 restart
-bash: apt:~#: command not found
-bash: apt:~#: command not found
apt:~# -bash: apt:~#: command not found
apt:~# Restarting web server: apache2Syntax error on line 68 of /etc/apache2/sites-enabled/domain.com.vhost:
-bash: -bash:: command not found
apt:~# apt:~# Restarting web server: apache2Syntax error on line 68 of /etc/apache2/sites-enabled/domain.com.vhost:
-bash: apt:~#: command not found
apt:~# -bash: Restarting: command not found
-bash: -bash:: command not found
apt:~# apt:~# Invalid command 'allow_url_include', perhaps misspelled or defined by a module not included in the server configuration
-bash: apt:~#: command not found
apt:~# -bash: Invalid: command not found
-bash: -bash:: command not found
apt:~# apt:~#  failed!
-bash: apt:~#: command not found
apt:~# -bash: failed!: command not found
-bash:  : unrecognized history modifier
apt:~#


----------



## Till (19. Okt. 2011)

Scheint so als ob Du eine php.ini Direktive in das apache Direktiven Feld eingefügt hast, wodurch apache nicht mehr starten kann. In der Fehlermeldung steht ja die Datei und Zeile, also entfern sie dort uund starte apache wieder. Danach entfernst Du sie auch in ispconfig, wo Du sie ins apache direktiven feld eingefügt hast.


----------



## mrairbrush (19. Okt. 2011)

Vielen Dank. Habs gleich gefunden und loppt wieder (Schweiss von der Stirn wisch)


----------



## mrairbrush (20. Okt. 2011)

Somit bleibt das Problem mit dn Include weiter bestehen. Keine andere Möglichkeiten?


----------



## Till (20. Okt. 2011)

Wieso das, hast Du es denn nicht durch readfile ersetzt?

Ich würde Dir zudem empfehlen dass Du Dir mal das php manual ansiehst, wofür include da ist und wofür eben nicht. Dann wisrt Du auch sehen, warum ein include über http nicht sinnvoll ist und es daher auch niemand verwendet.


----------



## mrairbrush (23. Okt. 2011)

Habs es jetzt mal durch readfile ersetzt. Kommt genau der selbe fehler.


----------



## Till (24. Okt. 2011)

Dann hast Du wahrscheinlich noch nicht URL fopen aktiviert. Öffne die php.ini und setze:

allow_url_fopen = On

dann starte apache neu.


----------



## mrairbrush (24. Okt. 2011)

Jetzt habe ich erstmal andere Probleme. Komme via FTP nicht mehr an die Domain und die Webseite kommt auch nicht

You don't have permission to access / on this server.
 Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
  Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at domain.com Port 80

So ein Rechte Problem. Vorher hatte ich schon Probleme mit der Fehlermeldung das ein Verzeichnis web6/tmp nicht existieren würde, aber es war definitiv vorhanden


----------



## mrairbrush (24. Okt. 2011)

war wohl der Safe-mode on.


----------

