AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP - sind hier "Sicherheitsexperten" an Board?
Thema durchsuchen
Ansicht
Themen-Optionen

PHP - sind hier "Sicherheitsexperten" an Board?

Ein Thema von himitsu · begonnen am 29. Jun 2010 · letzter Beitrag vom 9. Aug 2010
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#1

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 1. Jul 2010, 20:34
Sehe ich das richtig, dass du keine Prepared-Statements verwendest?

Gründe u.a.:
*) Besserer Schutz vor SQL-Injections
grade erst gesehn

Ja, im Code selber nutze ich sowas nicht, bzw. in einer etwas anderen Form vielleicht doch ... das ist aber alles in der Datenbankklasse integriert.

Einzig und alleine über die Feldnamen könnte man die "Schutzmaßnahmen", mittels bestimmter Prefixe absichtlich abschalten, aber von extern kommt man da nicht ran.


Ein Insert war z.B. so möglich.
Code:
function User_Set($Name, $Password, $Rights) {
  global $Config;
  $Config['DB']->Insert('UserTable', array(
    'Name'    => trim($Name),
    'Password' => $Password,
    'Rights'  => $Rights));
  return $Config['DB']->LastResult;
}
oder
Code:
return $Config['DB']->Insert('UserTable', array(
  'Name'    => trim($Name),
  'Password' => $Password,
  'Rights'  => $Rights));
oder auch sowas
Code:
if ($DB->Update('Irgendwas', array('feld' => 12345))) ...
hier würde der "feld ..."-Teil direkt übergeben
(hab halt keinen Query-Parser integriert)
Code:
if ($DB->Update('Irgendwas', 'feld = 12345')) ...
if ($DB->Update('Irgendwas', array('feld = 12345', 'x' => 0))) ...
man kann nur ein paar "grundlegende" Funktionen (mir reichen diese aber meistens aus) aufrufen, ihnen irgendwelche WHERE-, Feld- oder Daten-Listen mitgeben und dieses wird dann intern zusammengesetzt und z.B. über mysql_real_escape_string abgesichert/maskiert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#2

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 1. Jul 2010, 20:48
zusammengesetzt und z.B. über mysql_real_escape_string abgesichert/maskiert.
So hab ich das bislang auch gemacht. Allerdings haben mich die PS überzeugt. Ich denke, ich werde meinen Code entsprechend umstellen.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#3

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 1. Jul 2010, 20:49
Guck dir mal die PDO-Referenz an. Da siehst du was mit Prepared Statements gemeint ist

BTW (auch @Mithrandir): ich kann hier nur die Verwendung eines ORM (wie z.B. Doctrine) empfehlen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#4

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 1. Jul 2010, 21:00
ich kann hier nur die Verwendung eines ORM (wie z.B. Doctrine) empfehlen.
Nu' hab ich ja schon 'ne fertige Datenbankklasse implementiert und komme eigentlich auch gut damit klar. Was wäre denn der Vorteil, ganz grob umrissen, den ich mit Doctrine hätte? Denn immerhin bedeutet das ja auch, dass ich mich in ein neues System einarbeiten müsste. Daher tue ich mich auch noch schwer, auf symfony umzuschwenken, zumal das System nahezu komplett ist.
Auf der anderen Seite könnte ich mir aber auch vorstellen, dass symfony einiges vereinfachen könnte. Hab mir mal das Tutorial mit der Job-Website durchgelesen. Grob erinnert mich so ein PHP-Framework an die VCL in Delphi.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 2. Jul 2010, 06:32
Der Vorteil von Doctrine? Nu ja, nehmen wir an du hast eine Tabelle "Student" mit folgenden Spalten: id, lastname, firstname, birthday, matr.
Du hast entsprechend eine Klasse "Student" mit den Properties id, lastname, firstname, birthday, matr. Jedesmal wenn du Daten aus der Datenbank holst, werden automatisch die Objekte erzeugt, so dass du direkt damit arbeiten kannst:
PHP-Quellcode:
$student = Doctrine::getTable('Student')->findOneById($studentId);
if (!$student) {
// ...
}
$student->notifyAboutExams();
Das ist jetzt ein etwas stupides Beispiel, aber der Vorteil ist ganz eindeutig: jeder Datenbankzeile wird automatisch eine Objektinstanz zugewiesen.

Zusaetzlich gibts dann noch Plugins (Behaviors), welche dir Aufgaben abnehmen, z.B. das automatische Befuellen von Create- und Update-Timestamps, Soft-Delete, I18N (so dass du z.B. eine Kategorie hast, den Titel aber in beliebig viele Sprachen hinterlegst), uvm.

Zusammen mit Symfony kommt dann hinzu, dass dir diese Model-Klassen automatisch generiert werden, genauso wie die Formulare zur Datenmanipulation. Du hast also sehr schnell dein Skeleton anhand dessen du die Applikation zusammenbaust. Ist ein sehr interessanter Ansatz

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 2. Jul 2010, 08:13
Ok, das klingt wirklich nicht schlecht. Ich werde wohl erstmal bei meinem alten System bleiben, mir aber in den kommenden Monaten mal Doctrine/Symfony genauer angucken. Danke für die Erklärung.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.340 Beiträge
 
Delphi 12 Athens
 
#7

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 2. Jul 2010, 13:29
eigentlich 'ne recht nette Sache
Code:
function loadClass($name) {
  // zum Schutz, damit man hier kein Sicherheitsloch reinbekommt
  $name = str_replace(array('/', '\\', ':'), '_', $name);

  if ((($file = __DIR__ . "/includes/$name.inc.php") && file_exists($file))
       || (($file = __DIR__ . "/includes/$name.php") && file_exists($file)))
    require_once $file;
}

spl_autoload_register('LoadClass'), true);
schon hätte man einen Miniatur-Autoloader für ein kleines Projekt

nun nur noch alle Klassen nach /includes/ , jeweils in eine Datei mit dem Namen {Klassenname}.php

und schon kann man sich alle include/require sparen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

AW: PHP - sind hier "Sicherheitsexperten" an Board?

  Alt 3. Jul 2010, 09:39
Moin,

$name = str_replace(array('/', '\\', ':'), '_', $name);
mitdenken bitte. Versuch mal folgenden Code auszufuehren (jede Klasse einzeln):
class Foo\Bar { } class Foo/Bar { } class Foo:Bar { } Ersteres ist unter PHP 5.3 eine Namespace-Definition, da ist die Ersetzung echt doof (wobei ich jetzt auch keine Zeit habe zu gucken, was da dem Autoloader uebergeben wird). Alles andere wird dir der Parser wieder rueckwaerts an Kopf werfen, entsprechend kannst du die Ersetzung auch rauswerfen. Schliesslich ist da ja nichts drin was User-generated ist. Falls doch, zurueck an den Planungstisch und das Anwendungskonzept neu erstellen.

Ich empfehle uebrigens das Zend-Naming-Scheme:
<NS>_Class_Where_Parts_Represent_Folders. Vom include_path ausgehend wuerde er die Klasse in <NS>\Class\Where\Parts\Represent\Folders.php suchen. <NS> ist dabei dein "Namespace" (nicht zu verwechseln mit echten Namespaces). Der wurde eingefuehrt um Kollisionen zu vermeiden, wie z.B. zwischen dem heutigen Zend_Date (frueher nur "Date") und der PHP-Standard-Klasse Date. Bei dir koennte es z.B. FNSE_Controller_Abstract heissen.

Greetz
alcaeus

PS: mit User-generated meine ich bspw. sowas:
PHP-Quellcode:
$foo = $_GET['foo'];
$bar = new $foo();
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Antwort Antwort


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 aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz