php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.07.2008, 13:41  
Neuer Benutzer
 
Registriert seit: 12.06.2008
Beiträge: 21
PHP-Kenntnisse:
Anfänger
pck1983 befindet sich auf einem aufstrebenden Ast
pck1983 eine Nachricht über Skype™ schicken
Standard [Erledigt] Sicherheit erhöhen...

Hallo...

Ich wollte ein Script etwas sicherer machen...

Dazu habe ich das Teil so umgearbeitet, dass globals off sind...

Nun wollte ich aber noch Leute davon abhalten irgendwelchen "Unfug" mit HTML zu treiben...

foreach($_POST as $key => $val){
$_POST[$key] = strip_tags($_POST[$key]);
}

Jedoch werden hierbei Arrays zerstört...

WARUM??

Und noch was...

Einige Variablen kommen so oft vor, dass ich mir eine "Abkürzung" gebaut hab...

zB: $site = $_GET['site'];

Kann sowas meine Sicherheit beeinträchtigen?


DANKE!!
pck1983 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.07.2008, 14:02  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

$site = $_GET['site']

ist im Grunde nur nachgebautes register_globals = On, ich würde das lassen. Besser, du bastelst dir eine Klasse, die sämtliche $_GET, $_POST, $_REQUEST etc. -Variablen verwaltet.
Dann kannst du dir auch das Neuschreiben des $_POST-Arrays schenken, da die entsprechende Setter-Methode nur escapte Werte zurückgibt.
Manko10 ist offline  
Alt 30.07.2008, 18:43  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Frage 1/
Weil strip_tags nur Strings verarbeitet.
Eine gute Gelegenheit, sich mit rekusriven (verschachtelt selbstaufrufenden) Funktionen auseinanderzusetzen.
Ungetestet:
PHP-Code:
function strip_tags_multi (& $mValue)
    {
    
# -- für Arrays rekursiv aufrufen
    
if (is_array ($mValue))
      {
      
array_walk ($mValue 'strip_tags_multi');
      return;
      }

    
$mValue strip_tags ($mValue);
    } 
Die Funktion ruft sich für Array selbst auf, die Paramterübergabe/-nahme erfolgt referentiell.

Frage 2/
Zitat:
ist im Grunde nur nachgebautes register_globals = On, ich würde das lassen.
Der Meinung bin ich nicht. Das Problem an register globals ist das vom Programmierer nicht vorgesehene Initialisieren von Variablen (bspw. via Get Parameter). Klassisches Beispiel, bei dem die Sicherheitslücke aus einem nicht initialisierten Statuswert und dem passenden GET Aufruf ?status=permit entsteht:

PHP-Code:
// hier fehlt ein Setzen von $status;
if ($password == 'lkfdjt995' && $user == 'Horst') {
  
$status 'permit';
  }

if (
$status == 'permit') {
  
// do something
  

Bei der bewußten Zuweisung $site = $_GET['site'] ist das Gefahrenpotential nicht höher, als würde man mit $_GET['site'] selbst arbeiten: es kann natürlich in der Anwendung irgendwo überschrieben werden und dergl., aber nicht selbständig durch RG.
Eine verwaltende Klasse und das Arbeiten mit Kopien der Superglobalen ist trotzdem eine gute Idee.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 30.07.2008, 19:11  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
[...]Der Meinung bin ich nicht. Das Problem an register globals ist das vom Programmierer nicht vorgesehene Initialisieren von Variablen (bspw. via Get Parameter). Klassisches Beispiel, bei dem die Sicherheitslücke aus einem nicht initialisierten Statuswert und dem passenden GET Aufruf ?status=permit entsteht:[...]
Nagut, da hast du natürlich recht. Ich habe wohl nicht genau genug gelesen, da ich davon ausging, dass er das so lösen wollte, dass er am Anfang des Skripts alle Request-Variablen kopieren wollte. Z.B. so:
PHP-Code:
foreach ($_GET as $key => $value) {
    ${
$key} = $value;

Immerhin ist es oft so, dass kleine einzeilige Codebeispiele der Fragenden nicht ganz dem entsprechen, was es hinterher wirklich sein soll.

Geändert von Manko10 (30.07.2008 um 19:14 Uhr).
Manko10 ist offline  
Alt 30.07.2008, 19:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
dass er am Anfang des Skripts alle Request-Variablen kopieren wollte.
Genau das ist dann ein nachgebautes register_globals = On.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 30.07.2008, 19:29  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ich weiß.
Manko10 ist offline  
Alt 30.07.2008, 21:12  
Neuer Benutzer
 
Registriert seit: 12.06.2008
Beiträge: 21
PHP-Kenntnisse:
Anfänger
pck1983 befindet sich auf einem aufstrebenden Ast
pck1983 eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von Manko10 Beitrag anzeigen
$site = $_GET['site']

ist im Grunde nur nachgebautes register_globals = On, ich würde das lassen. Besser, du bastelst dir eine Klasse, die sämtliche $_GET, $_POST, $_REQUEST etc. -Variablen verwaltet.
Dann kannst du dir auch das Neuschreiben des $_POST-Arrays schenken, da die entsprechende Setter-Methode nur escapte Werte zurückgibt.
Das wäre eine Alternative...

Aber ich persönlich halte nichts von Web-Programmierung mit OOP!

Die meißten meiner Projekte werden dann von den Kunden bzw. mehr oder weniger versierten Leuten betreut und ich hab 0 Bock alle paar Minuten was debuggen zu müssen...

Daher ziehe ich es vor, wenn etwas in der 1. Zeile anfängt und in der letzten aufhört und nicht wie bei OOP frischfröhlich durch den Quelltext zappt...

Das Projekt aus dem der Quelltext stammt ist ein Kalkulationstool mit mehr als 300 Produkten zu je ca. 1,2 Milliarden Varianten und wird alle 1-2 Tage vom Kunden selbst überarbeitet bzw. debuggt (Preiskalkulation bzw. Berechnungsformeln)...
pck1983 ist offline  
Alt 30.07.2008, 21:31  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
?? und nicht wie bei OOP frischfröhlich durch den Quelltext zappt...
Kann ich nicht nachvollziehen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 30.07.2008, 21:37  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.709
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Ich auch nicht.
Natürlich, auch prozedurale Programmierung kann sehr sauber sein, aber OOP hilft erheblich, den Quellcode sauber zu halten. Man könnte es zwar als "quer durch den Quellcode zappen" bezeichnen, letztendlich ist es das aber nicht. Wenn du eine objektorientierte Anwendung hast, wird vieles einfacher.
Du kannst einem Kunden dann z.B. auch genau sagen, wo er etwas ändern muss. Außerdem wird der Code viel leichter erweiterbar.

Aber wenn du nicht von deiner Überzeugung abzubringen bist, dann kann es auch eine Funktion tun, auch wenn das längst nicht so ergonomisch ist.
Manko10 ist offline  
Alt 31.07.2008, 03:35  
ElPresidente
Gast
 
Beiträge: n/a
Standard

Googlesuche: "PHP IDS"
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
BACKLINK CHECK und SICHERHEIT von zentraler CSV-Datei ff-webdesigner.de PHP-Fortgeschrittene 16 27.11.2008 20:25
Sicherheit in PHP robydog PHP Tipps 2008 52 10.05.2008 13:09
externe MySQL und Sicherheit sportyflo Datenbanken 2 22.02.2008 11:09
FON und die WiFi Ads - Bald mehr Sicherheit PHP Tipps 2007 0 03.08.2007 12:06
PHP Sicherheit Plague PHP Tipps 2007 13 26.04.2007 16:24
PHP Sicherheit phpdummi PHP Tipps 2006 1 27.09.2006 23:31
Erfahrung mit Sessions ( Sicherheit ) GELight PHP Tipps 2006 6 11.08.2006 17:55
Sicherheit... GELight PHP Tipps 2006 5 31.01.2006 15:58
Sicherheit aufm Webserver ? Cyberbob_at_tot Off-Topic Diskussionen 7 17.10.2005 16:22
Sicherheit im Web-Interface nussbaum PHP Tipps 2005-2 9 29.06.2005 14:10
Sicherheit.... renzo PHP Tipps 2005-2 1 27.06.2005 15:53
Sicherheit von Klartext-Passwörtern PHP Tipps 2005 14 30.03.2005 15:22
[Erledigt] Thema Sicherheit? PHP-Fortgeschrittene 5 05.11.2004 05:43
Sicherheit bei Wertübergaben PHP Tipps 2004 3 14.10.2004 18:06
Sicherheit bei URL-Übergabe pcschröda PHP-Fortgeschrittene 25 28.06.2004 16:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:47 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum