Suma SE Forum · Login · Anmelden · Suche · Hilfe
 

Webkatalog Forum: Anpassungen / Ideen

 
Thema: Anpassungen / Ideen
 
Harry · Beiträge: 30

Also...
Erstmal Moin, Moin miteinander...

Ich hab mir Euer Script mal runtergeladen und installiert - Es ist so ziemlich genau das, wonach ich gesucht habe.
Klein, einfach und nicht zu aufgebläht.

Nun sitze ich allerdings schon ein paar Tage daran, es so anzupassen, das es für mich passt und habe so einige Anregungen / Kritik.

Das komplette Design basiert auf einem Table-Konstrukt. Okay - Das macht für mich das "händische" anpassen einfacher. Für die Designmöglichkeiten ist es aber eher abträglich.
Zumal ja eine CSS für die Syles verwendet werden. Warum diese Inkonsistenz?

Bei der Backlinkpflicht würde ich beim Eintrag nur darauf hinweisen, das eine solche besteht - Der Eintrag zwar aufgenommen wurde, aber erst freigeschaltet wird, wenn ein BL auf der Seite gefunden wird.
Ihr verwerft den Eintrag sofort und vergrätzt Euch damit potentielle Linpartner. Warum?

Ich gehe sogar noch einen Schritt weiter und Liste die Einträge ohne BLim Katalog, allerdings rel=nofollow - Das nervt und motiviert zum Backlinking...

Mit dem automatischen PR-Check wäre ich vorsichtig. Aber muss jeder wissen. Ich hab das aus dem Quellcode rausgeworfen. Google hat automatisierte Abfragen gar nicht gern und das könnte dem eigentlichen Zweck dieses Scriptes hier zuwiderlaufen

Das Captcha sollte keine 1 (eins), l (kleines L) und I (grosses I) erzeugen Winken
Die Verwechselungsgefahr ist enorm.
Damit sind wir schon beim nächsten:

Tippe ich das Captch falsch ab oder mache einen Fehler im Forular kann ich zwar auf "Zurück" klicken - Finde dann aber (MacOS - Firefox) ein leeres Formular wieder.. Heul!
Das macht keiner zweimal mit...

Mitunter wird aus unerfindlichen Gründen ein Eintrag nicht in der Datenbank durchgeführt. Ohne Fehlermeldung. Das geht nicht!

Ausserdem ist die schnöde "Eintrag angenommen" Mitteilung doch etwas dröge, oder?

Ich hab bei mir mal den ganzen Katalog auf UTF-8 umgestellt und seit dem keine Fehler mehr beim Eintrag gehabt. Allerdings läuft bei mir auch mysql auf UTF-8. Kann sein das es da zu inkonstistenzen beim Eintrag kam.

Der Forumlarcheck beim Eintrag in die DB ist zu wenig regide. Ihr habt z.B. das Pipe-Symbol vergessen zu mappen. Gibt bestimmt noch anderes.
Wie wäre es mit einigen Checks mehr!?

Insbesondere, wenn man sowas sieht, wird einem schon Anders:

Zitat:

if ($t4 == "") {
echo "$fehler_t4";
exit();
}


Wenn man weiss, das dahinter die Validierung (!!) einer E-Mailadresse steht, die dann 1:1 in die Tabelle "cache" der Datenbank geschrieben wird, kriegt man als Webmaster schweissnasse Hände beim Installieren dieses Verzeichniss-Scriptes....

BTW:
Warum werden die E-Mailadressen denn nach einer Freischaltung verworfen, also nicht in die "Haupt-DB" übernommen?
Muss man mit seinen Linkpartnern später nicht mehr kommunizieren? Falls mal ein Backlink wegbricht ist keine Nachfrage nötig, sondern ein direkter Rauswurf fällig?

Naja - So erhält man sich dauerhafte Freundschaften Smilie

Aber zurück zu Validierung:
Die Datenbankstruktur der Suma-SE ist öffentlich zugänglich. Steht ja im Verzeichns 1-Installation alles drin, was man braucht um die gesamte Datenbank mittels einer Super-Duper Einfachen SQL-Injection in Grund und Boden zu schiessen.

Okay .. Ich hab grade erst mit der Portierung angefangen Smilie
Normalerweise würde ich das Script jetzt vom Server löschen - Schon allein wegen der Systemanforderungen: safe_mode_off, register_globals on, open_basedir none..
Das letztere ist übrigens definitiv "not_nice", vor allem in Verbindung mit allow_url_fopen ist der Server schon so gut wie gehackt.

Ich bleib mal dran und versuche das noch etwas abzudichten..

Und: Nee,nee... Ich sag jetzt sicher nicht wo ich am rumprobieren bin:)

Viele sonnige Grüsse erstmal

vom

Harry Mit den Augen rollen


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
spaci76 · Beiträge: 33

hmm, ich lesen gespannt deinen Aritkel. Wir sind alle dankbar über Vorschläge die diesen Webkatalog sicherer machen. Also wenn du produktive Vorschläge hast, lass uns dran teil haben Winken.

Schick sie zu Rene, ich denke ich wird dein verbesserungsvorschläg umgehend zum download anbieten.

vielen dank

spaci76


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Harry · Beiträge: 30

Sehr böse Wer von Euch ist eigentlich auf die Idee gekommen die mysql_result sets numerisch zu indizieren?

Also

$row[7]

anstatt

$row['backlink']

zu schreiben und das Ganze in der Admin_area so unlesbar zusammen zu pappen das man davon schlechte Laune kriegt???

Sehr böse

Ich bin grade dabei die DB-Struktur zu erweitern (Rating, nofollow, details) und kriege hier Vögel vom ewigen Nachschlagen welche Spalte welche Nummer in welcher Tabelle hat.
Die Variablenkonvention ist auch etwas -nunja- unkonventionell??

Zitat:

$www_new = $row[4];
$result22 = @mysql_query("select * from verzeichnis where host = 0 order by ID desc");
while ($row11 = @mysql_fetch_row($result22)) {
$selected = "";
if ($row11[1] == $www_new) {
$selected = "selected";
}
$option .= "<option class=rubrik2 value=$row11[3] $selected>$row11[1]</option>";
$option .= get_unterkategorie_selected($row11[3], 1, $www_new);
}


Spassvögel
Mit den Augen rollen


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Harry · Beiträge: 30

Sorry, wenn ich gestern etwas "stinkig" war..
Soll nicht wieder vorkommen Cool ...

Ja, ich weiss auch, das man gefälligst nicht nur meckern soll..

Okay...

Also hiermal meine Lösung für das "leere Formular nach klick auf Zurück":

In die config.php ganz oben rein:

Zitat:

session_cache_limiter('private, must-revalidate');
session_cache_limiter();


Und Ruhe ist..

Bezüglich des $t4 email-checks hab ich folgendes reingeschrieben:

[quote]
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$t4)){
echo "$fehler_t4";
exit();
}
[/quote

Mag nicht 100% Perfekt sein, aber es langt seit Jahren so ...


Nicht jede mysql/php Installation unterstützt die

mysql_real_escape_string()

Funktion, die zur Absicherung der Formulareingaben (ALLER Formulareingaben!) unbedingt eingesetzt werden sollte.

Vor jedem Insert / Update ins mysql sollte daher unbedingt zumindest ein

addslashes()

mit den Werten erfolgen.

Ausserdem bastel ich grade an einer Detailseitenansicht für die einzelnen Einträge.
Dabei ist mir aufgefallen, das meine Installtion sich gerne mal in eine infinite Loop verabschiedet, wenn man eine Seite aufruft, die es nicht geben kann.

Soll heissen: rubriken.php??www=gibtsnicht (www.deinedomain.de/gibstnicht.html)

Dann schnellt die Serverlast in ungeahnte Höhen, mysql holt sich enorm Speicher und das Script läuft bis zur max_execution_time in der php.ini.
Lustig ist das, wenn man das abwartet und dann ganz schnell hintereinander auf "Reload" hämmert.
Mein Server hat da mit -zig Apacheprozessen geantwortet, die sich um alle Ressourcen geprügelt haben - Tschüss Servie. Einfacher geht Denial-of-Service nicht.

Da musst Du nochmal bei Smilie Deine Rekursion beim abklappern der Subkategorien macht da noch etwas Ärger!?

So was ist hässlich:
up 394 days, 7:23, 1 user, load average: 45.15, 19.70, 7.63

Bis denn

Harry


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Harry · Beiträge: 30

Ich steh auf Selbstgespräche Mr. Green

In der rubriken.php ab Zeile 10 das folgende Eingefügt:

Zitat:

//404 - Not found Erzeugen

$num = mysql_num_rows($result);

if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!

header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}



und schon hat der arme Webmaster keine Probleme mehr mit wildlaufenden Scripten.

BTW:

Wenn bei einer nicht vorhandenen Seite (DB-Eintrag) kein 404 Header erzeugt wird, geht G von einem existierenden Dokument aus. Kann man sich vorstellen was da im laufe der Zeit mit de Ranking passiert. Von wegen SUMA freundlich....

CYA

Harry


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
René · Beiträge: 78

Hi Harry,

erstmal danke für die hilfreichen Hinweise und Anregungen und willkommen hier im Forum.

Das die Software noch ein paar (kleinere) Makel hat, möchte ich nicht bestreiten.
Habe diese im Rahmen einer Studienarbeit erstellt, wobei ich sie dennoch Schritt für Schritt weiter verbessern möchte, auch mit Hilfe der User, also quasi als OpenSource Projekt.
Auch wenn die Software noch einer Weiterentwicklung bedarf, ist sie gegenüber vergleichbaren kommerziellen Produkten sicherlich im Vorteil, besonders in punkto Anpassung und Übersichtlichkeit, was sicherlich auch die weniger mit .php etc. vertraute User zu schätzen wissen.
Über kurz oder lang soll es trotzdem die beste Software werden Winken


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Tagri · Beiträge: 13

Harry hat folgendes geschrieben:

Zitat:

//404 - Not found Erzeugen

$num = mysql_num_rows($result);

if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!

header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}



Hallöchen,
als begeisterter Suma-Webkatalog-Anwender lese ich Harrys Beiträge natürlich mit gemischten Gefühlen. einerseits fasziniert mich halt die einfache Anwendung und Handhabung von Rene's Script, andrerseits sind Sicherheitslücken natürlich nicht unbedingt "das Gelbe vom Ei"

Nun finde ich es super von Harry, dass er hier, offentlichtlich selbstlos, nicht nur meckert, sondern auch konstruktive Änderungsvorschläge macht.

Hier stellt sich für mich aber jetzt die Frage, inwiefern dass, was Harry da von sich gibt auch wirklich "Hand und Fuss" hat, denn ich als Php-Looser kann nicht nachvollziehen, ob nicht sogar zusätzliche Schlupflöcher geschaffen werden, wenn ich seine Vorschläge befolge.

Von daher wäre es nicht schlecht, wenn Du Rene, die hier veröffentlichten Code-Schnipsel quasi zertifizieren könntest, einfach freigeben, dass man die dinge als Laie wirklich auch benutzen kann.

So und nun abschliessend noch ne Meldung... Wenn ich obigen Schnipsel in der rubriken.php einfüge bekomme ich folgende Fehlermeldung wenn ich auf irgendeine meiner Kategorien klicke:

Zitat:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/xxxxx/www.fxxxxxxare.de/rubriken.php on line 12

Warning: Cannot modify header information - headers already sent by (output started at /home/xxxxxx/wwxxxxxre.de/rubriken.php:12) in /home/vxxxxxx/wwwxxxxxxare.de/rubriken.php on line 16
404! - Dokument nicht gefunden

Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.


Was hab ich da nun falsch gemacht???

Gruss
Tagri



_________________
http://www.wir-haben.info
Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
spaci76 · Beiträge: 33

jupp, dafür wäre ich auch .. sodass wir eine aktuelle version mit den Korrekturen bereitstellen können.

cu
spaci76


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
spaci76 · Beiträge: 33

[quote="Harry"]Sorry, wenn ich gestern etwas "stinkig" war..
Soll nicht wieder vorkommen Cool ...

Ja, ich weiss auch, das man gefälligst nicht nur meckern soll..

Okay...

Also hiermal meine Lösung für das "leere Formular nach klick auf Zurück":

In die config.php ganz oben rein:

Zitat:

session_cache_limiter('private, must-revalidate');
session_cache_limiter();


Und Ruhe ist..

Bezüglich des $t4 email-checks hab ich folgendes reingeschrieben:

Zitat:

if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,4}$",$t4)){
echo "$fehler_t4";
exit();
}
[/quote

Mag nicht 100% Perfekt sein, aber es langt seit Jahren so ...


Nicht jede mysql/php Installation unterstützt die

mysql_real_escape_string()

Funktion, die zur Absicherung der Formulareingaben (ALLER Formulareingaben!) unbedingt eingesetzt werden sollte.

Vor jedem Insert / Update ins mysql sollte daher unbedingt zumindest ein

addslashes()

mit den Werten erfolgen.

Ausserdem bastel ich grade an einer Detailseitenansicht für die einzelnen Einträge.
Dabei ist mir aufgefallen, das meine Installtion sich gerne mal in eine infinite Loop verabschiedet, wenn man eine Seite aufruft, die es nicht geben kann.

Soll heissen: rubriken.php??www=gibtsnicht (www.deinedomain.de/gibstnicht.html)

Dann schnellt die Serverlast in ungeahnte Höhen, mysql holt sich enorm Speicher und das Script läuft bis zur max_execution_time in der php.ini.
Lustig ist das, wenn man das abwartet und dann ganz schnell hintereinander auf "Reload" hämmert.
Mein Server hat da mit -zig Apacheprozessen geantwortet, die sich um alle Ressourcen geprügelt haben - Tschüss Servie. Einfacher geht Denial-of-Service nicht.

Da musst Du nochmal bei Smilie Deine Rekursion beim abklappern der Subkategorien macht da noch etwas Ärger!?

So was ist hässlich:
up 394 days, 7:23, 1 user, load average: 45.15, 19.70, 7.63

Bis denn

Harry



hi,

@harry

wenn ich das mit dem
Code:
session_cache_limiter('private, must-revalidate');
session_cache_limiter();


eintrage kommt ein:


Warning: session_start(): Cannot send session cache limiter - headers already sent
Code:


is die posi in der config korrekt?

danke

cu spaci76



Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Marco · Beiträge: 12

Hallo Harry,

die session_cache-Geschichte klappt einwandfrei, ein echtes Plus in der Usability. Danke.

Aber das 404-Script in der rubriken.php will nicht.
Wenn ich es einbaue, kann ich keine einzige Kategorie mehr anklicken, es gibt sofort die 404-Seite zurück.

Ne Idee?

Gruß
Marco


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Harry · Beiträge: 30

Hi Marco,

ich hab natürlich die rubriken.php so umgebaut, das Sie mir passt.
Da ich in meinem eng begrenzten Themenkatalog keine Subrubriken verwende, muss ich darauf auch keine Rücksicht nehmen - Macht die rubriken.php aber im Header auch nicht Smilie

Gehen wir das mal in Ruhe durch:

Die .htaccess besorgt es der rubriken.php zunächst wie folgt:

Zitat:


RewriteEngine On
RewriteRule impressum.html impressum.php [L]
RewriteRule url-melden.html url-melden.php [L]
RewriteRule agb.html agb.php [L]
RewriteRule ^(.*).html$ rubriken.php?www=$1 [L]



Man beachte hierbei insbesondere das [L]...

Die Apache Foundation schreibt dazu:

Zitat:


last|L' (last rule)
Stop the rewriting process here and don't apply any more rewrite rules. This corresponds to the Perl last command or the break command in C. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules. For example, use it to rewrite the root-path URL ('/') to a real one, e.g., '/e/www/'.



Wenn man das [L] also konsequent da einsetzt, wo es hingehört, spart man sich Kopfweh beim einfügen weiterer dynamischer RewriteRules später mal, z.b. für Detail-Seiten...

Werfen wir nun einen Blick auf die Source, wirk schnell klar, was passiert:

Zitat:


$www = explode(".", $www);
$page = $www[1];
$www = "$www[0]";



Okay.. hätte man eleganter machen können und bietet auch einen Ansatz zur Optimierung zum Einsatz in einer besser abgesicherten php-Umgebung ($_GET['www'] anstelle $www), aber lassen wir das hier mal da es nicht wirklich Sicherheitsrelevant erscheint. Stichwort wäre hier register_globals off, kann jeder, den es interessiert, selbst mal Googlen..

Der obige snippet macht also aus einem www.meinedomain.de/mein-tolles-thema.html
erstmal ein www.meinedomain.de/rubriken.php?www=mein-tolles-thema.html
Expoldiert die Zeichenkette in ein gleich heissendes Array ($www[])) mit dem Punkt als Trenner.
(BTW: Never ever einen Punkt in Dein Thema Smilie

$www[0] enthält dann als Wert "mein-tolles-thema" und $www[1] bekommt den wert "html" und wird der Variablen $page zugewiesen. Das kann eigentlich verworfen werden...

Zitat:


include "config.php";
@mysql_connect($host, $dbuser, $dbpw) or die ("Es gibt leider Probleme mit der Datenbank. <br>Bitte versuchen Sie es erneut.");
@mysql_select_db($db) or die ("Datenbank nicht vorhanden");

$result = @mysql_query("select * from verzeichnis where web='$www' order by titel asc");



Da schauen wir nach, ob ein Eintrag mit $www (mein-tolles-thema) in der Datenbank gefunden wird.

Zitat:


//404 - Not found Erzeugen

$num = mysql_num_rows($result);



Jetzt komm ich Smilie
Und zwar schau ich nach, wieviele Einträge gefunden wurden und lege wen WErt in $num ab.

Zitat:


if ($num <> 1) { // Keiner oder mehr als ein Eintrag wurde gefunden. Fehler!!!



Und nur dann, wenn GENAU ein Eintrag gefunden wurde, wird folgender Code NICHT ausgeführt:

Zitat:


header("HTTP/1.0 404 Not Found");
echo"<html>
<head><title>Nicht gefunden</title></head>
<body>
<h1>404! - Dokument nicht gefunden</h1>
<p>
Das von Ihnen aufgerufene Dokument wurde auf diesem Server nicht gefunden.<br>
</p>
</body>
</html>";
exit();
}



Ich denke also mal, das Du eine andere .htacess verwendest.
Dann musst Du den Code entsprechend anpassen. Sollte ja nun kein Problem mehr sein Smilie

LG Harry

Edit:
Schau mal nach, ob Du die Abfrage

$result = @mysql_query("select * from verzeichnis where web='$www' order by titel asc");

noch drin hast Smilie

Deine Fehlermeldung deutet evtl. auch auf eine Fehlreferenzierung des Result-Sets ($result) hin.

So, als wenn die Abfrage nicht gelaufen ist und es deswegen keinen Zeiger auf das Resultat gibt.




Zuletzt bearbeitet von Harry am 09.05.2007, 11:02, insgesamt einmal bearbeitet
Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Harry · Beiträge: 30

[quote="spaci76"]
Warning: session_start(): Cannot send session cache limiter - headers already sent
Code:


is die posi in der config korrekt?

danke

cu spaci76


Bei mir schon Smilie

Du musst darauf achten, das Du keine Ausgaben an den Browser sendest, bevor Du nicht mit den headern fertig bist.
Guck mal ob Du irgendwo noch eine Leerzeile vor dem ersten

<?

in einem Dokument hast, das die config.php inkludiert.

Die von Dir angesprochene Fehlermeldung lässt darauf schliessen, dass Du irgendwo im Seitenkopf noch sowas hast...

LG

Harry


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
spaci76 · Beiträge: 33

Bei mir schon Smilie

Du musst darauf achten, das Du keine Ausgaben an den Browser sendest, bevor Du nicht mit den headern fertig bist.
Guck mal ob Du irgendwo noch eine Leerzeile vor dem ersten

<?

in einem Dokument hast, das die config.php inkludiert.

Die von Dir angesprochene Fehlermeldung lässt darauf schliessen, dass Du irgendwo im Seitenkopf noch sowas hast...

LG

Harry[/quote]

ich danke Winken Lachen

cu spaci76


Antworten mit Zitat Private Nachricht senden Benutzer-Profile anzeigen
 
 
Neue Antwort erstellen
 
Seite 1 von 1
 
 
 
 
 
 
Suma SE Forum · Login · Anmelden · Impressum · Datenschutz · Suma SE Download Suma SE Webkatalog Software · Powered by phpBB