PHP *.php vor direktaufruf schützen, zugriff darauf via javascript erlauben?

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Problem...

Ich versuche eine *.php Datei vor dem direkten Aufruff/Zugriff mit htaccess usw. zu schüztzen, klappt auch solange kein JavaScript/Ajax im Spiel ist, denn, sobald die*.js auf die *.php zugreifen will funktioniert die Anwendung nicht richtig.

Wie also kann ich eine PHP Datei schützen aber einer *.js Datei den Zugriff darauf erlauen?
Mir geht es nur darum das man die php Datei nicht direkt im Browser aufrufen kann und das kann man derzeit weil in dem *.js Script der Pfad zu dieser angegeben ist, das muss leider so weil ich mit Ajax die PHP nachlade ohne die ganze Seite neuladen zu müssen.

Danke.

Gruß
Belee
 
Übergibst du mit dem Javascript irgendwelche Werte an die PHP-Datei? Dann prüfe beim Aufruf letzterer einfach, ob (bestimmte) Werte gesetzt wurden. Wenn nicht: exit().
 
Häh? :D

Hast du eventuell nicht verstanden was ich möchte?

1. Ich habe eine PHP-Datei die ist in der index.php includiert, in dieser ist ein Formular welches zusätzlich "extern" via Ajax gesteuert wird, das heisst, damit beim absenden nicht immer die ganze index.php geladen wird, wird hier via Ajax nur immer die Formularseite neu geladen bzw. ausgetauscht.

2. Ich möchte jetzt diese PHP-Datei für den direkten Aufruf sperren, also, es soll nicht möglich sein diese
PHP-Datei einfach im Browser einzugeben, das kann ich verhindern indem ich eine htaccess benutze und zwar so...
PHP:
<FilesMatch "\.(php)$">
 Order Deny,Allow
 Deny from all
</FilesMatch>

Die PHP-Datei ist jetzt zwar geschützt aber die Ajax Geschichte funktinoniert nicht mehr, das Ajax-Script hat hier auch keinen Zugriff mehr auf die PHP-Datei.
Was also tun?
 
Der Post ist ziemlich unsinnig. Der Server bekommt grundsätzlich nie mitgeteilt wer oder was da auf seine PHP-Datei zugreift. Ob es ein Javascript ist oder nicht kannst du gar nicht feststellen.
 
Wie greifst du denn mit JS auf die PHP-Datei zu? Wodurch wird sie neu geladen?
 
Wenn JS/Ajax direkt aufs PHP File zugreift, dann geht dass so nicht. Du musst JS so schreiben, dass es über die index.php läuft.
 
Hier ist das JavaScript, eingebunden im <head>...
der index.php.
Gestartet wird sie wenn man in der PHP-Datei im Formular auf den submit Button klickt!

PHP:
var Poll = {
  
  poll_path : null,
  poll_url  : null,
  
  __construct : function( poll_path, poll_url ) {
  
  this.poll_path = poll_path;
  this.poll_url  = poll_url;
var self = this; 
  
  $( '#poll_sendbutton' ).click( 
  function() {
  return self.send();
}
 );
},
  send : function() {
var value = $("input[@name='poll_1']:checked").val();
  if ( ! value )
  value = '';
  
  $( '#poll_stat' ).html( "<img src=\"" + this.poll_path + "images/loading.gif\" alt=\"\" title=\"\" \/>" );
  $( '#poll_sendbutton' ).attr( "disabled", true );
var self = this;
  
  $.post(
  this.poll_url, {
  
  'send'   : 'ok',
  'PollID' : 1,
  'poll_1' : value
},
  function( response ) {
  self._handleResponse( response );
 }
);
  
 return false;
},
 
  _handleResponse : function( response ) {
  $( '#pollbody' ).html( response );
 }
}
  $(document).ready(
  function() { 
  Poll.__construct( '/dir/', '/dir/poll.inc.php', 'poll_form' ); 
 }
);

@lucky..
Es läuft über die index.php!
Ergänzung ()

IceMatrix schrieb:
Der Post ist ziemlich unsinnig. Der Server bekommt grundsätzlich nie mitgeteilt wer oder was da auf seine PHP-Datei zugreift. Ob es ein Javascript ist oder nicht kannst du gar nicht feststellen.

Komisch ist das das JavaScript nicht mehr funktioniert wenn ich die PHP-Datei mit htaccess schütze. Wenn es so ist wie du sagst, warum hat dann das JavaScript keinen Zugriff darauf?
 
Belee schrieb:
Komisch ist das das JavaScript nicht mehr funktioniert wenn ich die PHP-Datei mit htaccess schütze. Wenn es so ist wie du sagst, warum hat dann das JavaScript keinen Zugriff darauf?

weil AJAX prinzipiell genau das Gleiche ist, wie wenn du die Adresse in den Browser eintippst. Beides sind HTTP-Anfragen und es gibt bei HTTP-Anfragen keine Unterscheidung durch was sie ausgelöst wurden. Wenn du also den Aufruf der PHP-Datei mit einer .htaccess-Datei schützt, kann niemand mehr von extern deine Datei aufrufen.

Ajax sendet jedoch noch den weiteren HTTP-Header "X-Requested-With" den du mit PHP prüfen könntest, aber sicher in Punkto Sicherheit ist das auch nicht, denn auch HTTP-Header lassen sich fälschen.
 
Schickst du das nicht an die PHP-Datei?
PHP:
  $.post(
  this.poll_url, {
  
  'send'   : 'ok',
  'PollID' : 1,
  'poll_1' : value
},
Prüfe ob diese Werte gesetzt sind.
 
Da braucht man aber nur ein simples Firefox-Plugin, um trotzdem dran zu kommen.
Kurz gesagt, vor dem 0815-User bist du dann geschützt, wenn das dein Ziel war, ok.

Aber das was du vor hast geht nicht zuverlässig. Es sei denn, dein Ajax-Request geht zu 100% über eine Datei auf deinem Server, welche selbst nicht htaccess geschützt ist, aber auf die geschützte Datei zugreift. Wobei man dann natürlich auch per Browser auf die "Umleitung" zugreifen kann.
 
Zuletzt bearbeitet:
Was sagt uns das? mir das ich auf JavaScript/Ajax wohl ganz verzichten werde, zumindest nicht in Verbindung mit PHP nutzen werde. Wie man es auch dreht und wendet, PHP kann man wohl ganz gut absichern nur nutzt das wenig wenn man dann das ganze mit JavaScript selbst wieder aushebelt.
 
JavaScript läuft nun mal auf der Browserseite und nicht auf dem Server. Da ist es völlig klar, daß du weniger Kontrolle darüber hast - und daß du alle Daten, die du mit Ajax-Aufrufen abfragen willst, der Außenwelt zugänglich machen mußt. Inwiefern das ein Sicherheitsproblem ist, hängt natürlich ganz davon ab, was für Daten das sind und wie sicher das PHP-Skript, das sie ausliefert, geschrieben ist.
 
Wie wäre es, einfach das PHP-Script so zu schreiben, dass es nur das ausliefert was es soll?
 
Belee schrieb:
Was sagt uns das? mir das ich auf JavaScript/Ajax wohl ganz verzichten werde, zumindest nicht in Verbindung mit PHP nutzen werde. Wie man es auch dreht und wendet, PHP kann man wohl ganz gut absichern nur nutzt das wenig wenn man dann das ganze mit JavaScript selbst wieder aushebelt.

ehrlich gesagt, sagt uns das nur, dass du noch nicht ganz genau verstanden hast wie PHP und Ajax funktionieren.
 
Zurück
Oben