php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 3 Stimmen, 5,00 durchschnittlich.
  #1 (permalink)  
Alt 24-02-2008, 07:58
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard was ist sicherer/besser ?

hallo,

was ist als code sicherer und/oder besser ? :

PHP-Code:
$eintrag "insert into tabelle (`id`, `alpha`, `bata`, `gamma`) 
values ('', '" 
.  $_POST['alpha'] . "', '" .  $_POST['beta'] . "',
 '" 
.  $_POST['gamma'] . "')"
oder

PHP-Code:
$alpha $_POST['alpha'];
$beta $_POST['beta'];
$gamma $_POST['gamma']; 

$eintrag "insert into tabelle (`id`, `alpha`, `bata`, `gamma`) 
values ('', $alpha, $beta, $gamma)"

?

viele grüße, skys

Geändert von skys (24-02-2008 um 08:07 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 24-02-2008, 10:09
okoman
 Member
Links : Onlinestatus : okoman ist offline
Registriert seit: May 2002
Ort: Leipzig
Beiträge: 166
okoman ist zur Zeit noch ein unbeschriebenes Blatt
okoman eine Nachricht über ICQ schicken
Standard

Beide Varianten setzen ja die Requestvariablen einfach nur in deine Query ein. Letztlich kommen beide Möglichkeiten zum selben Endergebnis, welches nicht besonders sicher ist.
Wenn es dein Webserver zulässt, dann benutz doch PDO. Dort kann man auf einfache Weise Datenbankanfragen sicher übergeben und ausführen.

Auf http://www.php.net/manual/de/ref.pdo.php ist das sehr gut dokumentiert.
Mit Zitat antworten
  #3 (permalink)  
Alt 24-02-2008, 12:51
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm, beides nicht so sicher ?

habe mir den link angesehen und auch schon einen teil gelesen - mir scheint, das ist etwas ähnliches wie zend oder gehört dazu ?
auch scheinen dann wieder neue und andere befehle wie bei php nötig zu sein ?
eigentlich wollte ich php lernen und ich denke, auch wenn ich so etwas nutze, käme ich nicht wirklich drumherum php zu lernen bzw kann es ohnehin vielleicht erst dann korrekt einsetzen, wenn die ich php-grundlagen einigermaßen könnte ? und letztere fehlen mir ja leider noch.

was ich da so vor mich hincodel ist zum glück nichts größeres oder sehr öffentliches - es ist nur für ein paar freiwillige helferchen und zwecks besserer organisation (falls es denn mal klappen sollte).
allerdings hätte ich schon nichts dagegen, wenn es wenigstens vom code her korrekt und einigermaßen sicher wäre... mal sehen.
ich les dort noch etwas, vielleicht geht mir ja noch ein stern auf...
Mit Zitat antworten
  #4 (permalink)  
Alt 24-02-2008, 13:54
jmc
 PHP Junior
Links : Onlinestatus : jmc ist offline
Registriert seit: Mar 2006
Beiträge: 868
jmc befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
function sqlstr(&$addr){
 if(isset(
$addr)){return mysql_real_escape_string($addr);}
 return 
"";
}
$eintrag "INSERT INTO tabelle (id, alpha, bata, gamma) 
VALUES('', '" 
.  sqlstr($_POST['alpha']) . "', '" .  sqlstr($_POST['beta']) . "',
 '" 
.  sqlstr($_POST['gamma']) . "')"
So sollte es relativ sicher sein und ausserdem keine undefined indexes fehler geben. Deine erste Variante unten war übrigens etwas sicherer, da du dort einfache " ' " benutzt hast.
Mit Zitat antworten
  #5 (permalink)  
Alt 24-02-2008, 14:09
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard

vielen herzlichen dank jmc !

den ersten teil deines codes verstehe ich noch nicht (noch nachlesen muß und hoffe, er funktioniert bei mir auch g).
auf jeden fall aber schon etwas beruhigend

danke und viele grüße, skys
Mit Zitat antworten
  #6 (permalink)  
Alt 24-02-2008, 17:06
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ob die Variablen gesetzt sind, sollte vor dem Absetzen einer Query überprüft werden, so dass eine Query voller leerer Werte gar nicht erst abgesetzt wird!
Funktioniert das mit der Referenz und isset überhaupt?
Mit Zitat antworten
  #7 (permalink)  
Alt 24-02-2008, 20:34
Benutzerbild von bUTschy bUTschy
 Registrierter Benutzer
Links : Onlinestatus : bUTschy ist offline
Registriert seit: Aug 2005
Ort: Hamburg
Beiträge: 152
bUTschy ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo skys,

sicherer auf jedem fall mit mysql_real_escape_string

In deinem Fall würde ich das so schreiben:
PHP-Code:
$alpha mysql_real_escape_string($_POST['alpha']);
$beta  mysql_real_escape_string($_POST['beta']);
$gamma mysql_real_escape_string($_POST['gamma']); 
__________________
4cms.de
Mit Zitat antworten
  #8 (permalink)  
Alt 24-02-2008, 20:57
litterauspirna
 Registrierter Benutzer
Links : Onlinestatus : litterauspirna ist offline
Registriert seit: Nov 2007
Beiträge: 364
litterauspirna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mal ne Frage dazu. Wenn man
PHP-Code:
mysql_real_escape_string 
nutzt,wäre es da nicht auch angebracht mittels einer erstellten info.php zu erfahren ob beimprovider magic quotes auf on oder off gestellt ist?
Mit Zitat antworten
  #9 (permalink)  
Alt 24-02-2008, 22:51
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Magic Quotes sollte man einfach direkt per .htaccess-Datei auf off stellen.
Existiert ab php6 eh nicht mehr.
Mit Zitat antworten
  #10 (permalink)  
Alt 25-02-2008, 08:32
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hallo,

kontrollfrage, ob ich es richtig verstanden habe :
if(isset($addr)){return mysql_real_escape_string($addr);}
return "";
könnte man so übersetzen :
existiert die für sql zurechtgemachte variable addr bzw ist sie nicht leer, dann weiter, sonst leere felder ausgeben ?

und während mysql_real_escape_string die eingaben in einem formular nur für einen sql-query brauchbar machen, ist aber der if-teil hier drüber für die sicherheit wichtig ?

und ersetzt es im prinzip dieses ? :
if ($_POST['hiddenstring'] != '')
{ // wenn die post-variable nicht leer ist
mysql_close($connect);
header("Location: eintragen.php");
} else
{ // die post-variable ist leer - also formular ausgeben
...formular...
}

@ php desaster
Zitat:
Ob die Variablen gesetzt sind, sollte vor dem Absetzen einer Query überprüft werden, so dass eine Query voller leerer Werte gar nicht erst abgesetzt wird!
meinst du damit das von butschy ? :
$alpha = mysql_real_escape_string($_POST['alpha']);

Zitat:
Funktioniert das mit der Referenz und isset überhaupt?
keine ahnung was du damit meinst, falls du mich meintest

dann steht über magic quotes zwar etwas im manual, aber für mich noch chinesisch. ist das für mich auch relevant/sinnvoll ?
(aber ich vermute, das ist bei mir eh off, sonst gäbe es fehler, oder ?)

danke und viele grüße, skys

Geändert von skys (25-02-2008 um 10:14 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 25-02-2008, 10:10
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
@ php desaster
meinst du damit das von butschy ? :
$alpha = mysql_real_escape_string($_POST['alpha']);
Nein, ich meine sowas:
PHP-Code:
if( isset( $_POST['alpha'] ) ) {
    
$query "...";
    
// ...
}
else {
    
// Da fehlt noch was!

Zitat:
dann steht über magic quotes zwar etwas im manual, aber für mich noch chinesisch. ist das für mich auch relevant/sinnvoll ?
(aber ich vermute, das ist bei mir eh off, sonst gäbe es fehler, oder ?)
Am besten ist es - wie ghostgambler schon sagte - die Einstellung einfach auf off zu stellen. Ansonsten würdest du vor Eingabewerten wie " oder \ ein \ bekommen.
Mit Zitat antworten
  #12 (permalink)  
Alt 25-02-2008, 10:17
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard

nun warst du schneller als mein ps :

ist bzgl der automatisch erzeugten id und der zeit einer formulareingabe ebenfalls mysql_real_escape_string nötig ?
da bei beiden kein eingabefeld existiert, dürfte es doch auch keine möglichkeit geben, da etwas einzuschleusen (auch keine get-methode).
denke da an dieses beispiel :

PHP-Code:
$beta  mysql_real_escape_string($_POST['beta']);
function 
sqlstr(&$addr)
{
 if(isset(
$addr)){return mysql_real_escape_string($addr);}
 return 
"";
}
$eintrag "INSERT INTO tabelle (id, beta, zeit) 
VALUES ('', '" 
.  sqlstr($_POST['beta']) . "', '" time() . "')";
$eintragen mysql_query($eintrag)or die(__LINE__ .':'mysql_error()); 
müßte so dann alles stimmen, oder ?


bzgl deiner antwort schon mal danke, gleich nochmal abchecke *in einem haufen testdateien sitze und am sortieren bin*

viele grüße, skys
Mit Zitat antworten
  #13 (permalink)  
Alt 25-02-2008, 10:39
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Deine Frage verstehe ich ehrlich gesagt nicht ganz. Ich nehme an, du meinst das Weiterreichen der Daten über ein Hidden-Field? Dort musst du trotzdem escapen. Merk dir einfach, dass du alle Daten, die von Außen kommen, potentiell böse sind und entsprechend behandelt werden müssen.

Wenn du sowas hast wie in deinem Beispiel grad mit der Insert-Query, dann kannst du die id auch aus der Query herauslassen, damit der nächste auto_increment-Wert verwendet wird. Also:
PHP-Code:
$eintrag "INSERT INTO tabelle (beta, zeit) 
VALUES ('" 
.  sqlstr($_POST['beta']) . "', '" time() . "')"
Für die Zeit in Datenbanken verwendest du auch bitte keinen Unix-Timestamp, wie time() ihn dir liefert, sondern einen Zeittypen der Datenbank. In Kombination mit der DateTime-Klasse in PHP ein unschlagbares Team!
EDIT:
Für PHP-Versionen ohne DateTime kannst du auch mal im Zend-Framework nachsehen
Mit Zitat antworten
  #14 (permalink)  
Alt 25-02-2008, 10:58
skys
 Newbie
Links : Onlinestatus : skys ist offline
Registriert seit: Nov 2007
Ort: D
Beiträge: 69
skys ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Deine Frage verstehe ich ehrlich gesagt nicht ganz. Ich nehme an, du meinst das Weiterreichen der Daten über ein Hidden-Field?
ja, ich glaube, genau das meinte ich

Zitat:
Dort musst du trotzdem escapen. Merk dir einfach, dass du alle Daten, die von Außen kommen, potentiell böse sind und entsprechend behandelt werden müssen.
genau. und da ich kein id und keine zeit eingebe, sondern das php alleine in die db schreibt, dachte ich, das käme gar nicht von außen.

dh, ich kann alle ids in den INSERT-queries und bei VALUES rausnehmen ?
wär ja prima, hatte die immer mit drin (db hatte dann ebenfalls einfach auto mitgezählt)

bzgl zeittypen etc mache ich einen extra thread auf, da mir schon wieder ein arm voller fragen dazu einfällt
(diverse zeitformate ausgeben geht, aber du meintest ja das speichern.)
trotzdem schon mal danke für den tip, daß es auch anders + besser geht

viele grüße, skys

*vergessen :
wollte doch noch fragen, ob dies beides gleich sicher/gut ist :

PHP-Code:
$eintrag "INSERT INTO tabelle (id, beta, zeit)
VALUES('', '" 
.  sqlstr($_POST['beta']) . "', '" time() . "')";
$eintragen mysql_query($eintrag)or die(__LINE__ .':'mysql_error()); 
und
PHP-Code:
mysql_query("INSERT INTO tabelle (`id` , `beta` , `zeit`)
VALUES ('', '" 
.  $_POST['beta'] . "', '" time() . "')"); 
nu hab ich alles g

Geändert von skys (25-02-2008 um 11:01 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 25-02-2008, 11:05
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
wollte doch noch fragen, ob dies beides gleich sicher/gut ist :
Nein, da du bei der zweiten Abfrage kein Escaping vornimmst!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:20 Uhr.