PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Entwicklung und Softwaredesign (http://www.selfphp.de/forum/forumdisplay.php?f=14)
-   -   php SecurityFramework (http://www.selfphp.de/forum/showthread.php?t=25093)

Schneidoa 18.10.2013 11:40:57

php SecurityFramework
 
Hallo zusammen,

ich betreibe seit einiger Zeit eine Webseite, bei der Benutzer viele Möglichkeiten haben eigene Inhalte zu Posten. (Profilbild hoch-laden, Profil bearbeiten, Nachrichten schreiben etc.) . Jede Benutzereingabe wird vor der Verarbeitung geprüft bzw. gefiltert. Dies hat bisher auch ohne Probleme funktioniert.

Nun zu meiner Frage:
Um die Sicherheit meiner Webseite weiter zu erhöhen möchte ich zusätzlich alle Benutzereingaben von einem fremd entwickelten "SecurityFramework" überprüfen lassen. (doppelt hält besser)
Dieses möchte ich gerne vor dem Start meiner Anwendung ausführen. Es sollte konfigurierbar sein, ich würde gerne definieren können, dass zB. die POST-Variable 'email' nur email Adressen beinhalten darf oder dass die GET-Variable 'abc' nur Buchstaben enthalten darf.


Findet Ihr die Idee sinnvoll? Kennt Ihr ein geeignetes Framework?

Gruß
Schneidoa

sysop 18.10.2013 11:52:02

AW: php SecurityFramework
 
Nein, ad hoc fällt mir da nichts ein. Ein externes Script/Framework halte ich auch nicht für sinnvoll, da sowas neimals den eigenen Bedarf abdecken kann.

Der eine nennt sein Feld für email "email", der andere "mail", der dritte "tripstrü".
Das Verifizieren von Mailadresse lässt sich heute recht problemlos mit PHP lösen und was bei dir sonst noch geprüft werden soll/muss ist für ein Framework nicht nachvollziehbar.

Ich rate von sowas ab.

Schneidoa 18.10.2013 13:15:54

Danke für die schnelle Antwort.

Ich hatte an so was in der Art gedacht
PHP-Code:

$framework = new Framework();

if(!
$framework->isEmail($_POST['email'])){
$_POST['email'] = null;
}

//oder 
if(!$framework->isString($_POST['abc'],'a-zA-Z')){
$_POST['abc'] = null;
}

//oder 
if(!$framework->isPNGImage($_FILE['image'])){
$_POST['image'] = null;
}

//Alle anderen "Benutzervariablen" ($_POST, $_GET, $_SESSION etc) auf null setzten 

eine Funktion zum erkennen von Bruteforce-Angriffen, IP-Sperre etc. wäre auch ganz nett.

sysop 18.10.2013 15:51:40

AW: php SecurityFramework
 
Hallo

Zitat:

Zitat von Schneidoa (Beitrag 145655)
.....Es sollte konfigurierbar sein, ich würde gerne definieren können, dass zB. die POST-Variable 'email' nur email Adressen beinhalten darf oder dass die GET-Variable 'abc' nur Buchstaben enthalten darf.

Findet Ihr die Idee sinnvoll? Kennt Ihr ein geeignetes Framework?
...

Ich bezog mich auf deine Frage und bin davon ausgegangen, dass du ein fertiges Framework suchst, dass du einsetzten möchtest.
Sowas geht meistens schief, da es wie schon gesagt, selten alle Anforderungen abgedeckt werden.

Da du deinen Code besser kennst als sonst jemand, denke ich dass du Absicherungen selber machen solltest. Schwachstellen, die man sich durch ein Fremdscript importiert sollte man nicht unterschätzen. Ich setze da mehr auf mich selbst als auf andere.

Wenn dein Script ausreichend gepüft wird, ist eine neuerliche Prüfung eher eine Belastung für den Server als hilfreich. Andere mögen das differenzierter sehen.
Jedes Script, dass man einsetzt, erhöht in meinen Augen eher die Unsicherheit. Ideen und Anleitungen kann man sich aber durchaus von anderen Scripten holen.

Mal sehen, was andere dazu sagen.... ;-)

Schneidoa 18.10.2013 16:04:50

AW: php SecurityFramework
 
Danke für deine Einschätzung!

Wenn ich am Wochenende ein Paar Minuten Zeit finde, werde ich mal eine Klasse hierfür schreiben. und diese dann hier zur Durchsicht hochladen.

meikel (†) 18.10.2013 18:57:53

AW: php SecurityFramework
 
Zitat:

Zitat von Schneidoa (Beitrag 145657)
Ich hatte an so was in der Art gedacht

http://de3.php.net/filter
http://de3.php.net/ctype
Zitat:

IP-Sperre etc. wäre auch ganz nett.
IP Sperre ist in einem Land, in dem fast alle nur ne temporäre IP bekommen, sinnfrei.

Ckaos 19.10.2013 07:34:31

AW: php SecurityFramework
 
Hi,

Zitat:

Jede Benutzereingabe wird vor der Verarbeitung geprüft bzw. gefiltert.
Hast du das selbsterstellt? Was wird da geprüft / gefiltert? Was fehlt deiner Meinung?

Was du suchst ist denk ich ne Kombination aus Input-Klasse und Formular-Klasse. Hat jedes
PHP-Framework denk ich.

z.B. Codeigniter
input
form validation

Ich hab mir da aus verschiedenen vorhandenen irgendwann mal geschrieben.
bsp.
PHP-Code:

$form    ->createForm('newsletterForm');
        ->
_add(array(    'type'=>'text',
                        
'id'=>'EMail'))
        ->
_addRule(array(    'id'=>'EMail',
                            
'text'=>'<br /><span class="redtext">Bitte EMail angeben.</span>',
                            
'action'=>'required'))
        ->
_addRule(array(    'id'=>'EMail',
                            
'text'=>'<br /><span class="redtext">Bitte gültige EMail angeben.</span>',
                            
'action'=>'email'))
        ->
build();
if(
$form->proof('newsletterForm')==true){
    
//


Vielleicht bringt dich das auf ideen...

MfG

CKaos

Schneidoa 25.10.2013 16:53:33

AW: php SecurityFramework
 
Hatte leider noch nicht genügend Zeit das umzusetzen, aber schon einmal vielen Dank für die Antworten.

Hier mal meinen ungetesteten Ansatz:
PHP-Code:

<?php

class FormValidator{

    private 
$types = array(
            
"integer" => "isInteger",
            
"date" => "isDate",
            
"email" => "isEmail"
    
);

    private 
$data$rules;


    function 
__construct($data$rules){

        
$this->data  =$data;

        
/*
         $rules = array(
                 array("field" => "surname", "type" => "email")
         );
        */

        
$this->rules =$rules;

    }

    public function 
validate(){
        
$formData =  array();
        
$error =  array();

        
$rules $this->data;
        
$data  $this->rules;

        foreach (
$rules as $rule){
            
            if(isset(
$data[$rule['field']])){
                
$functionName =  $types[$rule['type']];
                if(
method_exists($this,$functionName)){
                    if(
$this->$functionName($data[$rule['field']])){
                        
$formData[$rule['field']] = $data[$rule['field']];
                    }else{
                        
$error[] = "ERROR:  '" $data[$rule['field']] . "'!";
                    }
                }else{
                    
$error[] = "Function '" $types[$rule['type']] . "' does not exists!";
                }
            }else{
                
$error[] = "Field '" .$rule['field']. "' does not set!";
            }

        }

        return array(
"error" =>$error"data" => $formData );

    }




    
/*Type Validation */

    
public function isInteger($val){
        
/*ToDo */
        
return true;
    }

    public function 
isDate($val){
        
/*ToDo */
        
return false;
    }

    public function 
isEmail($val){
        
/*ToDo */
        
return false;
    }
}


//Aufruf

--HTML
<input type="email" name="email_name">
<
input type="date"  name="date_name">


--
PHP

--Regeln definieren

$rules 
= array(
         array(
"field" => "email_name""type" => "email"),
        array(
"field" => "date_name""type" => "date")
);



$validator =  new FormValidator ($_POST$rules);

list(
$error$_POST) = $validator->validate();

print_r($_POST);
print_r(error);


Ckaos 26.10.2013 09:50:48

AW: php SecurityFramework
 
Hi,

sieht doch schon mal gut aus ;)
Aber hat noch einige fehler die sofort auffallen.
z.B.
PHP-Code:

$rules $this->data;
        
$data  $this->rules

Rules = Data ?
PHP-Code:

$functionName =  $types[$rule['type']];
//eher
$functionName =  $this->types[$rule['type']]; 

usw...

wird schon...

MfG

CKaos


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:37:42 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.