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
Seite 2 von 3     12 3      
Benutzerbild von alcaeus
alcaeus

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

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

  Alt 29. Jun 2010, 21:20
@alcaeus: Hätte ja nicht gedacht dass wir uns mal so einig sind. Hatten wir uns nicht mal darüber unterhalten, dass das einsparen solcher Regular Expressions deiner Meinung nach nichts bringen würde? |
Kann mich nicht dran erinnern, in letzter Zeit warens dann doch ein paar mehr PHP-Themen als dass ich mir deren Inhalte merken koennte. Darfst aber gerne suchen wenn du magst. *gg*
Ausserdem: du musst nur oefter meine Meinung annehmen, dann sind wir uns auch einig

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
 
#2

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

  Alt 1. Jul 2010, 13:44
[*]Um das functions.php-Beispiel weiterzufuehren: wenn du die Funktionen logisch in Klassen kapselst und mit nem Autoloader arbeitest dann sparst du dir das unnoetige Laden von zig Funktionen. Das Parsen der PHP-Dateien kostet naemlich ohne Opcode-Cache richtig viel Zeit. Wenn dein Code nur eine von 20 Klassen braucht, wird auch nur die geladen, und dann auch erst sobald sie benoetigt wird. Guck dir hierzu mal spl_autoload() an. Da ist uebrigens noch ein Vorteil von MVC-Frameworks: diese implementieren sowas bereits
*meld*

So ganz komme ich noch nicht hinter den Autoloader. Nehmen wir an, eine beliebige Klassendatei, bspw. content.class.php schaut so aus:
PHP-Quellcode:
<?php
require_once('dbconnector.class.php');
require_once('systemcomponent.class.php');

class content extends systemcomponent {

   //values
   var $contentid = 0;
   var $creationtimestamp = 0;
   var $modifiedtimestamp = 0;
   var $contenttype = "";
   var $title = "";
   var $summary = "";
   var $category = 0;
   var $parentcontent = 0;
   var $thecontent = "";
   var $authorid = 0;
   var $requireduserlevel = 10;
   var $ispasswordprotected = false;
   var $pass = "";
   var $commentsallowed = 1;
   var $ispublished = false;
   var $fancyhash = "";
   
   //constructor
   function __construct($id) {
        }
}
?>
Davon gibt es mehrere dieser Sorte, immer nach demselben Schema aufgebaut. Dann kommt noch eine zentrale index.php, die in etwa so aussieht:
PHP-Quellcode:
<?php
setlocale (LC_ALL, 'de_DE');
/* Start Session */
session_start();
/* Define a global Var */
define('SMARTY_DIR','./libs/smarty/');

/* Require some files */
require_once('./libs/smarty/Smarty.class.php');
require_once('./libs/nbbc/nbbc.php');
require_once('./classes/users.class.php');
require_once('./classes/searchprovider.class.php');
require_once('./classes/settings.class.php');
require_once('./classes/content.class.php');
require_once('./classes/tags.class.php');
require_once('./classes/comment.class.php');
require_once('./classes/validator.class.php');
require_once('./classes/category.class.php');
require_once('./classes/statistics.class.php');

/* Create some Objects */
$smarty               = new Smarty();
$settings            = new Settings();
$currentUser          = new Users();
$nbbc               = new BBCode();
$tags               = new Tags();
$stats               = new Stats();
//[...]
?>
Angenommen, ich möchte jetzt spl_autoload(); nutzen. Wie implementiere ich das? Irgendwie steig ich da noch nicht ganz durch... Muss ich die vorhandenen Klassen um eine autoload-Methode erweitern? Muss ich einfach den Autoloader in der index.php definieren? Oder beides?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Hisoka

Registriert seit: 2. Jan 2008
Ort: im Norden
53 Beiträge
 
FreePascal / Lazarus
 
#3

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

  Alt 1. Jul 2010, 13:52
Die Hilfe wirkt hier Wunder: http://de.php.net/manual/de/function.spl-autoload.php
Guck mal in den Kommentaren da sind ein paar gute Beispiele vorhanden.
  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, 14:42
Hab ich mir schon vorher angesehen. Allerdings scheint es bei mir nicht wirklich hinzuhauen. Ich habe folgende Pfade probiert:

PHP-Quellcode:
define('CLASS_DIR', 'classes');
define('CLASS_DIR', 'classes'.DIRECTORY_DELIMITER);
define('CLASS_DIR', 'xampp\htdocs\dagi_micro\classes'.DIRECTORY_DELIMITER);
Haut nicht hin. Folgender Code kommt dabei zum Einsatz:

PHP-Quellcode:
// Add your class dir to include path
set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);

// You can use this trick to make autoloader look for commonly used "My.class.php" type filenames
spl_autoload_extensions('.class.php');

// Use default autoload implementation
spl_autoload_register();
Soweit ich das verstehe, muss die Datei zumindes im Include-Pfad liegen. Nur, wie bekomme ich den dahin? Ich arbeite übrigens unter Windows mit XAMPP. Das finale System nutzt einen Debian-Server. Als Fehlermeldung bekomme ich nur, dass die Klasse "Settings" nicht gefunden werden kann.
米斯蘭迪爾
"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.384 Beiträge
 
Delphi 12 Athens
 
#5

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

  Alt 1. Jul 2010, 14:50
Code:
function __autoload($Klassenname) {
  $Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname);
  require($Datei);
}

// registriert sich automatisch, über seinen Funktionsnamen
oder besser doch
Code:
function MeinAutoKlassenlader($Klassenname) {
  // das kann auch eine statische Klassenmethode sein
  $Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname);
  require($Datei);
}

spl_autoload_register('MeinAutoKlassenlader, true);
oder
Code:
function MeinAutoKlassenlader($Klassenname, $ListeDerRegistriertenDateiendungen) {
  // das kann auch eine statische Klassenmethode sein
  $Datei = suche_PhpDatei_in_welcher_die_Klasse_enthalten_ist($Klassenname, $ListeDerRegistriertenDateiendungen);
  require($Datei);
}

spl_autoload_register('MeinAutoKlassenlader, true);

jetzt einfach eine Klasse verwenden, welche noch nicht existiert
- zugehörige Datei wurde noch nicht geladen (require/include)
Code:
$Test = new IrgendeineKlasse();
nun wird also die registrierte Funktion aufgerufen, darin die benötigte Datei geladen und dann kann's weitergehn.

eigentlich recht nette sache


hab mir nun selber einen kleinen Autolader geschrieben

oder man verwendet halt den vordefinierten Autoloader und steuert ihn über
set_include_path, spl_autoload_extensions und Co.
Dieser nimmt z.B. den Klassennamen und versucht sich daraus einen kleichnamigen Dateinamen zu basteln
(sowas geht aber nicht, wenn die Dateien nicht wie die Klasse heißen und/oder man mehrere Klassen in einer Datei liegen hat)

Klasse "statistics" in "./classes/statistics.class.php"
= suchpfad "./classes/"
= dateiendung ".class.php"

dann kann das require_once('./classes/statistics.class.php'); weg
und auch alles, welches diesem Muster entspricht
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Jul 2010 um 14:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 29. Jun 2010, 21:17
hab nix dageben
@RedBox: das von alcaeus les ich mir auch gleich durch

Also MVC kenn ich noch nicht.
Hatte die letzen Jahre schon einige CMS ausprobiert und das Einzige was jetzt noch auf'm Server ist, sind eigene Sachen, ein kleines Fotoalbum und ein WordPress, welches bis jetzt als Einziges halbwegs brauchbar erschien.

Hab halt keine Lust teilweise bis zu mehreren 100 MB für ein kleines CMS zu belegen ... Einige waren zwar im Gegenzug auch sehr umfangreich, aber dafür war dann nie das zu finden, was man grade braucht.

Kennst du TikiWiki? Das "klang" nicht schlecht, war auch "leicht" Installiert, aber ich fand nichtmal raus, wie man eine neue Seite erstellte.


Ich nutze das Ganze auch vorwiegend zum Lernen (man lernt fast täglich was Neues) und ich hoffe daß (zumindestens für mich) am Ende etwas "brauchbares" rauskommt.


* es gibt doch nur eine globale Variable
die $Config und sonst gibt es maximal ein paar Konstanten

* ganz soooo flexiebel hab ich eh nie vor
(wer weiß, ob es jemals jemand Anderes, außer mir verwenden wird
und wer "mehr" will, der kann gerne eines von den teilweis 200-300 MB kleinen CMS-Packeten installieren ... da ist dann natürlich viel mehr möglich)

aber was das angeht, da hab ich mir mal ein vollkommen anderes unkonventionelles "System" ausgedacht, welches erst auf einer höheren Ebene integriert wird, mal sehn ob es dann auch

* "es sind einige Rechtschreib- oder Tippfehler zu finden"
es läuft soweit und nach sowas hatte ich noch garnicht viel geguckt (sowas sieht mal selten von alleine)

* "du mixt sehr extrem Groß- und Kleinschreibung"
hmmm?
Das mach ich überall so, also Wortanfänge groß.

* "Die wesentlichen Config-Einträge wie MySQL-Zugangsdaten stehen in Zeile 2090!"
Die stehn doch ab Zeile 18 in der Config.php, gleich der 5 Konfigurationsparameter?

* "du magst preg_match, oder? *g*"
die ein/zwei mal
ich versuche das später über die Cache wieder gut zu machen

* "fummle doch bitte nich an den Dateirechten rum. 0777 ist ein böses Gerücht, völlig sinnlos und nicht Aufgabe des Script."
eine der Zeilen, welche ich ungefragt seit Jahren von einem Projekt ins andere kopiere.
(hatte da mal einige Probleme, daß Dateien die via FTP eingespielt wurden, nicht via PHP änderbar/löschbar waren)
PS: sowas findet man sehr oft in tausenden "Tutorials"
aber da hör ich gern auf dich

* "denn was die Verzeichnisstruktur angeht, hast du dein Projekt sehr klein gehalten"
das war Absicht.
> "Scripts" für inneren Dateien
> "Media" für die paar Bilder, CSS, JS und Co.
> "Cache" ist klar
> ein oder mehre "Files" für Dateianhänge und Co.
Cache und Files können verschoben werden (hab da z.B. auf meinem Webspaces ein nettes Verzeichnis, welches nicht via HTTP erreichbar ist)
Aber selbst wenn man darauf zugreifen könnte, dann sollte über die .htaccess alles gesperrt werden und die Dateinamen werden dort auch niemals Endungen wie .php haben. Und die index.html sollte notfalls verhindern, daß der Server einen Dateiindex bei example.com/Files/ ausliefert, falls die .htaccess versagt ... ich hoffe ja das reicht aus

* "OOP ist leider gar nicht verwendet worden"
hey, die MySQL- und die ein/zwei anderen Klassenzählen garnichts?

Und ja, ich hab mit sowas grad erst angefangen:
- Die Destruktoren lernte ich erst vor Kurzem kennen und es gefällt mir langsam.
- Variablen-Referenzen bei Parametern (vorallem in den Anfängen der Template-Klasse) sind auch nett (ebenfalls erst vor 'ner Weile kennengelernt)

Hatte mir schon überlegt die Funktionen der Funktions.php in Klassen auszulagern, aber mir fiel noch kein schönes Konzept ein.

* "Lieber sollte man per htaccess immer die index.php aufrufen"
Rate mal, warum es bis jetzt nur diese eine Index.php gibt?
Eventuell wird es noch ein/zwei weitere spezialiesierte Dateien geben,
und der Rest wird mir ein bissl ModRewrite-Rumgespiele über .htaccess geregelt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 29. Jun 2010, 21:20
@index.php5 : das ist soeine Sache, welche aktuell nicht anders ging.
.php ist noch mit PHP 4 verbunden
und PHP 5 konnte ich nur so nutzen

Aber darum hab ich es auch so geregelt, daß die Dateiendungen halbwegs flexibel sind.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#8

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

  Alt 29. Jun 2010, 21:24
Hallo,

@alcaeus: Nicht nötig, ist auch nicht so wichtig.

@himitsu: Ich weiß gar nicht wie man auf 200-300 MB pro CMS kommt. PHP-, HTML-, JavaScript und CSS-Code ist klein und lässt sich über Packer sehr stark komprimieren. 200-300 Megabyte sind wahrscheinlich noch hunderte unnötige Design, Dokumentationen, Bilder, usw. Scheue dich nicht dafür für dein "kleines CMS" 200 PHP-Dateien und Ordner zu erstellen. Ein inode auf der Festplatte kostet nicht die Welt an Speicher. Der Aufwand eine viele tausende Zeilen große Datei zu managen schon.

Und übrigens: OOP ist für mich nicht die Verwendung der MySQLi-Klassen. OOP ist, wenn du's selber machst. Viele schöne Klassen, Interfaces, Vererbungen, Abstraktionen oder finale Klassen. Sowas macht den Reiz aus.

Ich kann dir als Referenz auch noch das Zend Framework empfehlen. Jenes ist zwar sehr langsam, als technischer Ansatz aber sicher einen Blick wert. Deren API, die abstrakte Implementation und das gesamte Konzept ist sehr gut Durchdacht und meiner Meinung nach echt lobenswert.

Liebe Grüße,
Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 29. Jun 2010, 21:37
OK, das war vielleicht ein bissl übertrieben, aber es gibt ja einige "Webseiten", wo das ganze System, alleine schon in der Grundausstattung, mindestens 30-50 MB belegte (jedenfalls war das letztes Jahr noch so ... hab grade nachgesehn und dieses komische Joomla scheint geschrumpft zu sein )


Das php = PHP4 wurde damals so belassen, als PHP 5 eingebaut wurde, damit es halt keine Probleme mit alten Sachen gibt und alles Problemlos weiterlief.

Für den Webspace ist eigentlich schon lange eine Umstellung geplant.
Erstmal sehn, ob/wie ich wenigstens einige der alten Sachen so umstelle, daß sie unter PHP 5 laufen würden ... ist aber nicht mehr viel Altes vorhanden ... das ändern der Serverkonfiguration für .php = PHP5 wäre schnell erledigt, aber ich wüßte nicht, was an index.php5 soooooo schlimm sein sollte?
(wäre doch letztendlich eh hinter 'nem ModRewrite verschwunden )

Zitat:
OOP ist für mich nicht die Verwendung der MySQLi-Klassen. OOP ist, wenn du's selber machst.
ähhhhhh?

Ich lerne grade mal die Anfänge von PHP 5 kennen ... ist nicht grade einfach das Ganze.





Aber über meine Session/Keks-Verwaltung sagt keiner was :heul:
Wisst ihr wie schwer das war die Session/Kese nur zu erstellen/verwenden, wenn die wirklich benötgt werden? (nach dem Einloggen oder Umstellen der Anzeigesprache)
Also standardmäig bekommt man von dem Script keinen Keks verpaßt.

Das ist mein Beitrag zur Entmüllung des Internets/Browsers.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jun 2010 um 21:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 29. Jun 2010, 21:44
Das ist auch nicht so sehr verschieden vom OOP anderer Programmiersprachen (klar gibt es auch hier Ausnahmen).
Es gibt aber einige gute Tutorials bzgl. OOP in PHP5. Vielleicht ist das hier einen Blick wert.

Meinen Vorrednern kann ich mich anschließen.
Gute Ansätze hast du in deinem CMS, aber man kann noch viel machen, um es zukunftsfähiger auszurichten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 09:56 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