Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP-Variablen wiederholt an Javascript übergeben (https://www.delphipraxis.net/169153-php-variablen-wiederholt-javascript-uebergeben.html)

delphinub23 2. Jul 2012 20:38

PHP-Variablen wiederholt an Javascript übergeben
 
Hallo DPler,

ich habe eine PHP-Datei, die globale Variablen hält, welche über "Pointer"-Variablen referenziert werden. Diese werden gefüllt wenn das PHP-Skript ausgeführt wird (gefüllt via MySQL).

Nun möchte ich aus einem Javascript heraus diese "Pointer"-Variablen wiederholt füllen lassen und im Javascript zugänglich machen.

Ist das machbar? Wenn Ja, wie?

Grüße,
dnub

BUG 2. Jul 2012 20:45

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Ich habe zwar nicht verstanden, was du genau willst, aber es kling so, als ob Bei Google suchenAJAX (+ Bei Google suchenJSON) helfen könnte.

delphinub23 2. Jul 2012 21:01

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Danke für deine Anwort.

Nochmal zur Erklärung:

Ein PHP-Skript füllt globale Variablen mit Informationen aus einer MySQL-Datenbank.

Diese PHP-Variablen möchte ich in einem Javascript zur Verfügung stellen und tue dies auch indem ich das Skript inkludiere und dann in meinem Javascript die PHP-Variablen auslese:
Code:
var test = "<?php echo($ref_phpvartest);?>";
Einmalig funktioniert das super, doch ich muss die Variablen in bestimmten Abständen neu füllen lassen und dann wieder an mein Javascript übergeben.

Ich habe bereits versucht das Script mit einem AJAX XMLHTTPREQUEST neu ausführen zu lassen, aber die Daten in den globalen Variablen ändern sich leider nicht.

Darum frage ich nun hier :)

schlagzu 2. Jul 2012 21:32

AW: PHP-Variablen wiederholt an Javascript übergeben
 
zum senden:
Code:
   function setRequest(url,parameter) {
      // Request erzeugen
      if (window.XMLHttpRequest) {
         request = new XMLHttpRequest(); // Mozilla, Safari, Opera
      } else if (window.ActiveXObject) {
         try {
            request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
         } catch (e) {
            try {
               request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
            } catch (e) {}
         }
      }

      // überprüfen, ob Request erzeugt wurde
      if (!request) {
         alert("Kann keine XMLHTTP-Instanz erzeugen");
         return false;
      } else {
         // Request öffnen
         request.open('post', url, true);
         // Requestheader senden
         request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
         // Request senden
         request.send(parameter);
         // Request auswerten
         request.onreadystatechange = function() {
            interpretRequest();
         };
      }
   }
zum ausführen:
Code:
function interpretRequest() {
   switch (request.readyState) {
      // wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
      case 4:
         if (request.status != 200) {
            alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
         } else {
            // Antwort des Servers -> als XML-Dokument
            var xmlDoc   = request.responseXML;
            // Name aus dem XML-Dokument herauslesen
            var error = xmlDoc.getElementsByTagName('error')[0].getAttribute('code');
            if (error != '0')
            { alert('Error '+error+' : '+xmlDoc.getElementsByTagName('error')[0].getAttribute('name')); return;}
            var id = xmlDoc.getElementsByTagName('deleted')[0].getAttribute('id');
            document.getElementById('row_'+id).style.display = "none";
         }
         break;
      default:
         break;
   }
}
muss man dann halt anpassen

schlagzu 2. Jul 2012 21:37

AW: PHP-Variablen wiederholt an Javascript übergeben
 
der php script dazu:

Code:
         
$id = $_POST['row'];
$sql = 'select * from '.$GLOBALS['sql_pre'].'Stations';
$result = sql_query($sql , array(''));
if (count($result) >= 2)
{
$ajax_error = '3';
$check_error = "Eine Station muss bleiben!";
}
$sql = 'DELETE FROM '.$GLOBALS['sql_pre'].'Stations WHERE ID = '.$id;
$result = sql_query($sql , array(''));
echo "<?phpxml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<content>\n";
echo " <error code=\"".$ajax_error."\" name=\"".$check_error."\"/>\n";   
echo "<deleted id=\"".$id."\"/>\n";
echo "</content>\n";

generic 3. Jul 2012 08:41

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Das PHP-Script ist hochgradig unsicher!

SQL-Injections !

schlagzu 3. Jul 2012 13:04

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Code:
<?php
   $badwords = Array('/(.*)(SELECT)( *?)(\*|\'?[a-z]\'? *?,? *?){1,}( *?)(FROM)(.*)/',
                 '/(.*)(DELETE)( *?)(\[[A-Z0-9]\],?){0,4}( *?)(FROM)(.*)/',
                 '/(.*)(DROP|ALTER)( *?)(\[[A-Z0-9]\],?){0,}( *?)(TABLE)( *?)(.*)/',
                 '/(.*)(UPDATE)( *?)([a-z0-9[]]*?)( *?)(SET)( *?)(.*)/',
                 '/(.*)(INSERT)( *?)(\[[A-Z0-9]\],?){0,4}( *?)(INTO)( *?)([A-Z0-9_\-]*)( *?)(VALUES)(.*)/',
                 '/(.*)( *?)([A-Z0-9]{1,})(\'|"| *?)(AND|OR)( *?)(\'?|"?)([A-Z0-9]*)(\'?|"?)( *?)([=<>]{1,2})(.*)/');
   
function anti_inject(&$array)
   {
   global $badwords;
      foreach ($array as $key => $value)
      {
      $value = strtoupper($value);
      foreach ($badwords as $bad)
         {
         $bad = strtoupper($bad);
         if (preg_match($bad,$value))
            {
              return true;
            }
         }
      }
   unset($bad);
   foreach ($array as $key => &$value)
      {
      $value = addslashes(stripslashes(mysql_real_escape_string($value)));
      }
   unset($value);
   return false;
   }
   
if ((anti_inject($_POST)) or (anti_inject($_GET)) or (anti_inject($_COOKIE)))
   {
   die('Injectionsversuch erkannt!');
   }
?>
jetzt ist er sicher!

Valle 3. Jul 2012 14:04

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Um Gottes Willen, bloß nicht! So sollte man niemals programmieren! Bitte füge das letztere Script nicht in dein Projekt ein. :(

Der gesamte PHP-Code aus #5 und #7 ist (nimm's bitte nicht persönlich) grauenhaft. Da sind so viele Negativbeispiele zu finden...

Was die Sicherheit des Scripts angeht reicht das hier völlig aus:

PHP-Quellcode:
$id = intval($_POST['row']);
Liebe Grüße,
Valentin

delphinub23 3. Jul 2012 14:18

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Danke für die vielen Antworten.

Zitat:

$id = intval($_POST['row']);
Die Zeile füllt doch die PHP-Variable mit dem Wert, der mit dem Aufruf übergeben wird, oder?

schlagzu 3. Jul 2012 14:34

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Sicher reicht aus, aber in dem Projekt wo ich das kommen so viele Eingaben zusammen (beben int, Text, ect.) und das scannt einfach alles, wenn man mal vergisst zu überprüfen.
Des weiteren war das nur n Ausschnitt aus einem bestehendem Projekt, und ich hab mir php selbst beigebracht. Aber wenn du möchtest kannst du beide Ausschnitte korrigieren.

BUG 3. Jul 2012 15:05

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Zu deinem großen Projekt:
  1. Benutzte parametrisierte SQL-Anfragen!
  2. Betreibe, wo es geht, kein Blacklisting, sondern sondern überprüfe auf den Wertebereich, den du haben willst.
  3. Wo das nicht geht: Zum Filtern von Text (zB. nach "bösem" HTML) gibt es Projekte, die vermutlich besser machen als man selbst [1, 2, usw.].
  4. Gleiches gilt für das Erkennen von Angriffen.
Das sollte eigentlich nicht nur für PHP gelten :mrgreen:

Die Negativbeispiele sehe ich auf Anhieb nicht klar heraus, habe aber nicht annähernd soviel PHP gesehen wie Valle.

delphinub23 3. Jul 2012 18:57

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Habe es nun wie folgt mit AJAX gelöst:
Ich rufe aus dem Javascript das PHP-Skript mit einem "Function"-Parameter auf.
In dem PHP-Skript lese ich den "Function"-Parameter aus und starte die übergebene Funktion.
Die Funktion schmeißt via dem "echo"-Befehl die globale Variable aus und diese wird dann im Callback (responseText) an die Javascript-Variable übergeben.

Das funktioniert mit vielen Anfragen nur synchron, aber das ist für meine Problemstellung kein Problem.

Danke für die Hilfe ;)

Grüße,
dnub

Valle 3. Jul 2012 20:48

AW: PHP-Variablen wiederholt an Javascript übergeben
 
@BUG:
  • Codeeinrückung
  • Verwendung von $GLOBALS
  • Verwendung von globalen Variablen allgemein
  • die SQL-Injection aus #5
  • Trennung von Logik, Darstellung und Datenbank (MVC)
  • unnötiges IDS statt Prävention durch ORM oder Parameter
  • Verwendung der veralteten MySQL-Funktionen
  • addslashes(stripslashes()) ?!
  • sowieso ist die angesprochene Zeile komisch!?
  • unvollständiger Schutz (es gibt noch andere SQL-Befehle)
  • eventuelle Probleme wenn das in einem Forum stünde, in dem einer SQL postet
  • die() statt gescheiter Fehlerbehandlung (--> HTTP-Status)
  • Verwendung von (hier unnötigen!) Pointern
  • strtoupper() statt case-insensitive preg_match
  • keine Überprüfung auf möglicherweise aktivierte Magic-Quotes
  • sehr ungünstiger Funktionsname anti_inject() (lässt nicht auf Rückgabewert schließen)
  • ich glaube nicht, dass count($result) funktioniert (mysql_num_results)
  • fehlerhaftes XML ("<?phpxml"?)

Ich finde sicher noch mehr wenn ich will. *g*

Ansonsten ist es am besten auf diese komischen IDS und präventive "Sicherheitssysteme" komplett zu verzichten. Einfach keine direkten SQL-Codes schreiben, dann kann eine SQL-Injection auch nicht passieren. Ein guter ORM oder wenigstens parametriesierte SQL-Queries sind hier vorzuziehen. Das andere Zeug bereitet früher oder später nur Probleme.

@delphinub23: Ich bin mir nicht ganz sicher, was du mit deiner Frage meinst. Schau doch mal in der Hilfe zu intval().

Liebe Grüße,
Valentin

Namenloser 3. Jul 2012 21:19

AW: PHP-Variablen wiederholt an Javascript übergeben
 
Zitat:

Zitat von delphinub23 (Beitrag 1173374)
Habe es nun wie folgt mit AJAX gelöst:
Ich rufe aus dem Javascript das PHP-Skript mit einem "Function"-Parameter auf.
In dem PHP-Skript lese ich den "Function"-Parameter aus und starte die übergebene Funktion.

Klingt gefährlich. Lege auf jeden Fall eine Whitelist an und erlaube nur Funktionen, bei denen du sicher bist, dass sie keine bösen Nebenwirkungen haben können.

schlagzu 4. Jul 2012 13:13

AW: PHP-Variablen wiederholt an Javascript übergeben
 
  • Codeeinrückung // wie gesagt ist nur n Auschnitt
  • Verwendung von $GLOBALS //warum nicht?
  • Verwendung von globalen Variablen allgemein
  • die SQL-Injection aus #5 //Ok ich sehe es ja ein
  • Trennung von Logik, Darstellung und Datenbank (MVC) // wie gesagt ist nur n Auschnitt! ich hab das nur schnell zusammengekratzt
  • unnötiges IDS statt Prävention durch ORM oder Parameter
  • Verwendung der veralteten MySQL-Funktionen //ich benutze keine MySQL befehle sondern eine eigene sie je nach dem mysql, mssql oder mssql für php >= 5.3 umleitet
  • addslashes(stripslashes()) ?! //ja es werden erst fehlende hinzugefügt und dann entfernt
  • sowieso ist die angesprochene Zeile komisch!? //mag sein
  • unvollständiger Schutz (es gibt noch andere SQL-Befehle) //ok das sehe ich ein
  • eventuelle Probleme wenn das in einem Forum stünde, in dem einer SQL postet //machts nicht
  • die() statt gescheiter Fehlerbehandlung (--> HTTP-Status) //an so was habe ich nicht gedacht
  • Verwendung von (hier unnötigen!) Pointern //ka wasdamit gemeint ist
  • strtoupper() statt case-insensitive preg_match //ok könnte man machen
  • keine Überprüfung auf möglicherweise aktivierte Magic-Quotes //läuft nur auf PHP >= 5.4
  • sehr ungünstiger Funktionsname anti_inject() (lässt nicht auf Rückgabewert schließen)
  • ich glaube nicht, dass count($result) funktioniert (mysql_num_results) //funktioniert und wie oben beschrieben habe ich das wegen verschiedenen sqls
  • fehlerhaftes XML ("<?phpxml"?) // :oops: das ist mir passiert als ich auf einmal alle <? zu <?php gemacht habe

Sry aber ich muss mich rechtfertigen um meine Gedankengänge aufzuzeigen


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz