php datei nur von Server IP ausführbar

klausi89

Erfahrenes Mitglied
kann mir jemand sagen ob es möglich ist eine bestimmte php datei nur von meinem Server ausführbar zu machen

also quasi falls fremdzugriff sein sollte das dann eine Fehlermeldung ausgegeben wird aber mein Server diese php datei aufrufen kann.

am besten per php und nicht mit htaccess

Danke schonmal
 
kann mir jemand sagen ob es möglich ist eine bestimmte php datei nur von meinem Server ausführbar zu machen
Meinst du, dass die Datei eine interne Datei sein soll, und auf demselben Server liegt?
Oder, dass die Datei auch auf einem anderen Server liegen kann?
Ein Hack "ohne" (mit Standard-htaccess) wäre, die PHP-Datei nicht im html-Verzeichnis zu haben, und einfach zu includen.
https://stackoverflow.com/questions...-a-folder-where-all-inclusive-php-files-exist

Es gibt $_SERVER['remote_addr'], aber das kann leicht umgangen werden (jeder Client kann irgendwas angeben, und Proxyserver ändern das auch.

am besten per php und nicht mit htaccess
PHP selbst kann das nicht. Wenn du ganz sichergehen willst, müsstest du ein geheimes Token per POST (eher nicht GET, da Länge) mitgeben, das ausser dir niemand kennen kann.

Gruss
cwriter
 
Nein...die Datei liegt auf meinem Server und es wird eine API ausgelesen die dann weiter verarbeitet wird momentan kann sie aber durch jeden eingesehen werden und das möchte ich aber nicht....wie würdest Du das lösen?
 
es wird eine API ausgelesen die dann weiter verarbeitet wird
Die Datei beinhaltet also eigentlich keine Ausgabe? Dann gehört sie eigentlich sowieso nicht ins /var/www/html.

wie würdest Du das lösen?
1) Aus dem html-Verzeichnis raus (eins höher ins www), includen.
2) .htaccess
3) Token. Entweder per Session Variable (hat Nachteile mit Session Hijacking u.ä.) oder per eigenem Request (http://php.net/manual/de/function.stream-context-create.php) (hat den Vorteil, dass Zugriff von aussen möglich ist, wenn man das Token hat):
Beispiel mit Sessions:

PHP:
<?php
session_start();

$_SESSION['access_token'] = 'c$=Z^fcdeF-Rf8sPCKEqm@-5b@zt&&ZRmLCkF=+7mnMGhr6^=gaSckXYKSGCfxHDeq8ng=V6f-Xa^2YL=DhJ_9AWhd48#+ZGZJgdcm$=e=bY^dk^m$&rDYj&Cusrnq5cqEW+WgVMdzPUGRccCL-u@Xp?u@sVs?PSu%4sD$g$kQw@Kt$Ha=BhZ@Ubu?JAg2^VHdj6gCzd74aAE69sY+&7xPsQNAU45L%8eNx6nW4K?$yexe%Ke#BnAxe8$ZMuTAL3';

//Keine Ausgabe vor dem hier (und nichts danach, da möglicherweise nicht ausgeführt)
header( "Location: gesperrt.php" );

PHP:
//gesperrt.php

if($_SESSION['access_token'] === 'c$=Z^fcdeF-Rf8sPCKEqm@-5b@zt&&ZRmLCkF=+7mnMGhr6^=gaSckXYKSGCfxHDeq8ng=V6f-Xa^2YL=DhJ_9AWhd48#+ZGZJgdcm$=e=bY^dk^m$&rDYj&Cusrnq5cqEW+WgVMdzPUGRccCL-u@Xp?u@sVs?PSu%4sD$g$kQw@Kt$Ha=BhZ@Ubu?JAg2^VHdj6gCzd74aAE69sY+&7xPsQNAU45L%8eNx6nW4K?$yexe%Ke#BnAxe8$ZMuTAL3')
{
   //ok
}
else
{
    //Nicht zugänglich.
}

Das Token sollte in einer nicht-zugänglichen Datei gespeichert sein, um das ganze ein bisschen weniger redundant zu machen. Auch erfordert das, dass der Client Sessions unterstützt.

4) $_SERVER['remote_addr']. Nicht wirklich zuverlässig, kann funktionieren, würde es nicht für die Absicherung sensitiver Daten verwenden.

Gruss
cwriter
 
Na doch sie gibt die kompletten Inhalt einer typischen JSON Datei aus wovon dann wiederum verschiedene datatables ihre Daten abfragen.... ( gleicher Server gleiche ip...keine externen Abfragen)

Außerhalb des webverzichnises komme ich nicht da dies von meinem Provider nicht zugelassen wird....

Weiß nun immer noch nicht wie ich die Datei vor fremdzugriff schütze :-(
 
Weiß nun immer noch nicht wie ich die Datei vor fremdzugriff schütze :(
Mach dir das Leben einfach und nutze das Tool, das dafür gedacht ist: htaccess.
https://stackoverflow.com/a/3604605/6834778

Der Weg mittels Token habe ich schon oben beschrieben. Wenn du einfach nur includest, wird es noch einfacher (du kannst dir den Redirect sparen).

Da du offenbar ohnehin includest, geht $_SERVER['remote_addr'] nicht.

Aber mir scheint, dass du auf Biegen und Brechen etwas basteln willst.
Wieso willst du eine Datei sperren, die die Rohdaten ausgibt? Die Daten erhält man ja auch auf der Seite selbst?

Gruss
cwriter
 
ok probiere htaccess aus......

ich mache das da es einen russischen Mitbewerber gibt der schon mein komplettes Seitenlayout geklaut hat und online ist und ich befürchte das er sich meine Datatables aneignet und dann noch bei meiner Json datei sich die Daten holt.....deshalb der Aufwand

wenn er kein zugriff auf die json hat könnte er die daten auch nicht so einfach einlesen

danke schonmal
 
Zuletzt bearbeitet:
hmmm....

hab jez mal ne .htaccess

mit dem Code

<files json.php>
Order allow,deny
allow from 127.0.0.1
Deny from all

</files>

datei ist zwar gesperrt aber die Datatables melden nun auch einen Fehler und können nix mehr auslesen
mit der eigentlichen server IP geht es auch nicht

weiß da jemand warum ?
 
https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html hat gesagt.:
Ordering is one of:
Allow,Deny
First, all Allow directives are evaluated; at least one must match, or the request is rejected. Next, all Deny directives are evaluated. If any matches, the request is rejected. Last, any requests which do not match an Allow or a Deny directive are denied by default.

Deny,Allow
First, all Deny directives are evaluated; if any match, the request is denied unless it also matches an Allow directive. Any requests which do not match any Allow or Deny directives are permitted.

Bei dir trifft die deny-Regel immer zu (deny all), daher wird alles abgewiesen.

Damit müsste es eigentlich gehen.
Code:
<files json.php>
Order deny,allow
allow from 127.0.0.1
Deny from all
</files>

Gruss
cwriter

/EDIT: Moderner (Apache 2.4):
Code:
<files json.php>
Require local
</files>
(ungetestet)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück