Schrift
[thread]5715[/thread]

Welche Schreibweise verwendet ihr ?: ... nur aus Interesse (Seite 7)

Leser: 3

Question: Welche Schreibweise verwendet ihr ?: ... nur aus Interesse
Variante 1
Variante 2
Variante 3
ich will ein Bier
You have to log in to vote.
57 voter(s) so far


<< |< 1 ... 4 5 6 7 8 9 10 ... 17 >| >> 169 Einträge, 17 Seiten
jan
 2006-04-24 02:31
#51016 #51016
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
mh, wie meinst du, sähe der exploit aus?
betterworld
 2006-04-24 02:45
#51017 #51017
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=jan,24.04.2006, 00:31]mh, wie meinst du, sähe der exploit aus?[/quote]
das hängt immer davon ab, wie der code aussieht...
Nehmen wir an, in einem Webforum wird der Benutzer folgendermaßen authentifiziert:
Code: (dl )
1
2
3
4
5
6
7
8
my ($given_login, $given_pw) = ($query->{l}, $query->{p});
for (@users) {
if ($_->{login} =~ m{^\Q$given_login\E$} and
$_->{pw} =~ m{^\Q$given_pw\E$}) {
$logged_in_as = $given_login;
last;
}
}

Um das jetzt zu exploiten, muessten wir uns nur mit dem Namen "betterworld\n" registrieren, irgend ein Passwort setzen. Dann melden wir uns als "betterworld" an und geben das Passwort von "betterworld\n" an. ("betterworld" war schon vorher ein existenter Account, den wir gerne hijacken moechten.)

# edit: ich habe eine Zeile korrigiert in dem Code\n\n

<!--EDIT|betterworld|1145832730-->
master
 2006-04-24 12:03
#51018 #51018
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
Variante 1 finde ich scheisse.....

Naja ich nutzte eher eine Kombination aus allen:

Im Notfall und bei grösseren komplizierten Blöcken nehme ich Variante 2, da diese die klassische und am logischsten ist.


Sowas würde ich aber als Einzeiler machen... (geht gerade noch)
Code: (dl )
if ($string eq "Perl-Community") {print "Hallo\n"; } else { print "Tschuess\n";}


Im Prinzip rate ich allen, besonders bei grösseren Blöcken
Die öffnungs und schliesstags auf gleicher Höhe zu machen, besonders wenn es dann noch verschachtelt wird. Kleines mach ich als Einzeiler oder in der art wie Variante 3.

Meine Standard-Methode: (manchmal auch "Variante 3")
Code: (dl )
1
2
3
4
5
6
if ($string eq "Perl-Community") 
{
print "Hallo\n";
} else {
print "Tschuess\n";
}


am übersichtlichsten (öffnungs/schliesstag als gleichwertig):
Code: (dl )
1
2
3
4
5
6
7
8
9
if()
{
if()
{
if()
{
}
}
}
\n\n

<!--EDIT|master|1145866309-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2006-04-24 12:15
#51019 #51019
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum findest Du die 1.Variante "scheisse"?


Deine Variante empfinde ich persönlich als unschön (nicht scheisse), weil es inkonsequent ist. Mal hast Du die geschweifte Klammer in einer neuen Zeile und mal hintendran. Das erhöht nicht gerade die Übersichtlichkeit und erschwert die Fehlersuche (wo gehört die schließende Klammer jetzt hin?).

Das mag bei drei/vier Zeilen pro Block noch gehen, aber danach kann man es nicht mehr auf einen Blick erfassen.

Genau aus diesem Grund bevorzuge ich die Variante 1.

Bei if-else rate ich von einem Einzeiler ab, weil das die Wartbarkeit drastisch reduziert. Der Mensch ist von Grund auf Lesefaul und wird deshalb häufig das else überlesen. Bei einem einfachen if (ohne else-Teil) geht das noch...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
master
 2006-04-24 12:49
#51020 #51020
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@renee
meine standardmethode ist mein persönlicher stil..
ja das ist beim } else { inkonsequent. Daher rate ich auch anderen schön die Klammern gleichwertig zu schreiben.
"if () {" ist genauso inkonsequent wie meine methode
wobei ich meine methode öfters nutze als variante 3
immer wenn ich "variante 3" brauchen müsste, mach ich dann eh einenen Einzeiler. denn bei grösseren Blöcken und verschachtelt ist "Variante 3/1" ungeeigent da sollte man ganz klar "Variante 2" nehmen



das einzige was mir mit der zeit zu umständliche wurde
war das es immer 3 zeilen brauchte
für:
}
else  
{

daher habe ich mir persönlich }  else  {
angewöhnt... und lese das schnell genug, da ich den Ausdruck " }  else {" als Ganzes sehe... und auch mit leerzeilen etwas hervorhebe.

also mein if block sieht für mein auge so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
if()
{
    print 'hallo';
    print 'hallo';

} else {    

    print 'hallo';
    print 'hallo';
}


Einzeiler = sind ok, wenn sie kurz sind.
Es erhöht durchaus die lesbarkeit bei kurzen Blöcken. oder wenn eine if abfrage nicht soo wichtig ist.

Code: (dl )
1
2
if(a$ eq 1)  { $a = 0 }  else { $a = 1 }
if(b$ eq 1)  { $b = 0 }  else { $b = 1 }


anstelle von:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(a$ eq 1)  
{
  $a = 0;
}  
else
{
  $a = 1;
}

if(b$ eq 1)  
{
  $b = 0;
}  else
{
  $b = 1;
}





In seltenen fällen mache ich manchmal auch sowas:

Code: (dl )
1
2
3
4
5
6
7
if(1 eq 1)
{
 print 'hallo';
 print 'hallo';
 print 'hallo';

} else { last; }

jedoch nur wenn im else-block nur 1 sub oder 1 befehl steht..


meistens gibt es bei Abfragen einen Hauptblock.

dieser sollte mit gleichwertigen
{
}

geschrieben sein. inf " if () { " zerstört dieses konzept, und erschwert die fehlersuche

Zudem habe ich gemerkt, das man immer wenn man "if() {" schreiben könnte gerade so gut einen Einzeiler machen kann.

Wichtig ist, das man mit leerzeilen richtig umgeht.
und es so optisch hervorhebt.

Code: (dl )
1
2
3
4
5
6
7
8
Entweder so:
if(1 eq 1) {print 'hallo';} else {print 'hallo';}

oder so:
if(1 eq 1) { print 'hallo'; } else { print 'hallo'; }

Anstatt sowas:
if(1 eq 1){print 'hallo';}else{print 'hallo';}
\n\n

<!--EDIT|master|1145869029-->
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
Crian
 2006-04-24 12:56
#51021 #51021
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Master, das ist häßlich, ich darf mich mal zitieren?

[quote=Crian,11.09.2003, 21:57]Nummer 1 - siehe perlstyle ^^[/quote]
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
sid burn
 2006-04-24 12:59
#51022 #51022
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=betterworld,24.April.2006, 00:45]
Code: (dl )
1
2
3
4
5
6
7
8
my ($given_login, $given_pw) = ($query->{l}, $query->{p});
for (@users) {
if ($_->{login} =~ m{^\Q$given_login\E$} and
$_->{pw} =~ m{^\Q$given_pw\E$}) {
$logged_in_as = $given_login;
last;
}
}

Um das jetzt zu exploiten, muessten wir uns nur mit dem Namen "betterworld\n" registrieren, irgend ein Passwort setzen. Dann melden wir uns als "betterworld" an und geben das Passwort von "betterworld\n" an. ("betterworld" war schon vorher ein existenter Account, den wir gerne hijacken moechten.)[/quote]
Irgendwie verstehe ich deine Sichtweise nicht so ganz.
Wenn ich, ebenfalls mit einer Regex, überprüfe ob der Benutzer Bereits existiert, dann kann ich kein Benutzer "betterworld\n" anlegen, da es ja das selbe wäre wie "betterworld". Und ich würde eine Meldung bekommen das der benutzer bereits existiert.

Und sagen wir mal man unterscheidet das registrieren mit einem "\n". Dann sehe ich da immer noch keine Probleme. Da es nun in der Datenbank 2 Benutzer gibt. Einmal "betterworld" und einmal "betterworld\n". Wenn ich mein SQL Query dann abschicke hole ich mir entweder das Passwort von "betterworld" oder "betterworld\n", dass jeweils ein unterschiedliches Passwort wäre. Ich könnte also auch nicht das Passwort von "betterworld\n" benutzen um mich mit "betterworld" einloggen.

Zum anderen muss ich auch gar nicht irgendein Benutzername vergleichen. Warum auch? Den Benutzername brauche ich lediglich um das Passwort zu holen, und ich vergleiche danach das Passwort.

Zum anderen sollte es aber Generell ungewollt sein, wenn \n auf einer Website zu den akzeptierten zeichen gehört. Solche Zeichen sollte man bei der Eingabe eigentlich nicht erlauben.

Quote
Master, das ist häßlich, ich darf mich mal zitieren?

[quote=Crian,11.09.2003, 21:57]Nummer 1 - siehe perlstyle ^^
[/quote]
Naja, Gott sei dank Programmieren wir hier nicht mit Python, und wir können selber entscheiden was wir für leserlicher finden, und was nicht. Das dass "{" noch auf der selben Zeile steht wie das if, for, while konnte ich mich noch nie mit anfreunden. Wenn andere es leserlicher finden, dann hindert sie ja keiner daran es zu benutzen.\n\n

<!--EDIT|sid burn|1145869686-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
master
 2006-04-24 13:02
#51023 #51023
User since
2003-10-20
610 Artikel
BenutzerIn
[default_avatar]
@crain

in dem punkt ist der Perlstyle hässlich.... und inkonsequent..

Code: (dl )
1
2
3
for (;;) {
statements;
}


jetzt such mal das öffnungs "{" es befindet sich ein "for" dort.. und manchmal ein "while" oder "if" usw.

optisch und logischerweise ist das einfach besser:
Code: (dl )
1
2
3
4
for (;;) 
{
statements;
}


Perlstyle ist halt nicht in allem gut...
Übersichtlich sollte es sein, nicht kryptisch.
$i='re5tsFam ^l\rep';$i=~s/[^a-z| ]//g;$\= reverse "\U!$i";print;
renee
 2006-04-24 13:07
#51024 #51024
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nein, es ist nicht so inkonsequent wie Deine Methode:
Code: (dl )
1
2
3
4
5
6
if(){
# Code
}
else{
# Code
}


Hier steht die schließende Klammer auf der gleichen Ebene wie das Schlüsselwort, von dem der Block begonnen wurde. Bei
Code: (dl )
1
2
3
4
5
6
if()
{
# Code
} else {
# Code
}


Hast Du die erste schließende Klammer unter der öffnende und die zweite schließende Klammer steht irgendwie alleine da! Wie gesagt oben ist die Zuordnung immer "Schlüsselwort zu schließender Klammer" und bei der unteren Variante ist es mal "Öffnende zu schließender Klammer und dann keine Ahnung zu schließender Klammer".

So lange es nur Code für Dich ist, ist es ja absolut ok. Jeder hat seinen gewissen eigenen Stil. Aber sobald der Code von jemand anderem gelesen wird, sollte der Code klar strukturiert und gut lesbar sein.

Quote
In seltenen fällen mache ich manchmal auch sowas:

Code

if(1 eq 1)
{
print 'hallo';

print 'hallo';
print 'hallo';
} else { last; }

jedoch nur wenn im else-block nur 1 sub oder 1 befehl steht..


Eigentlich sollte man es so machen, dass der else-Block der größere (mit mehr Code) ist - auch aus Gründen der Wartbarkeit. Und in diesem Beispiel geht das else total unter.

Und für so was:
Quote
Einzeiler = sind ok, wenn sie kurz sind.
Es erhöht durchaus die lesbarkeit bei kurzen Blöcken. oder wenn eine if abfrage nicht soo wichtig ist.

Code

if(a$ eq 1) { $a = 0 } else { $a = 1 }
if(b$ eq 1) { $b = 0 } else { $b = 1 }
benutze ich lieber
Code: (dl )
1
2
$a ^= 1;
$b ^= 1;


oder zur Not:
Code: (dl )
1
2
$a = $a ? 0 : 1;
$b = $b ? 0 : 1;


Nicht dass Du das falsch verstehst. Ich möchte Dir bestimmt nicht vorschreiben, wie Du zu programmieren hast. Ich möchte nur ein paar Hinweise geben, wie man Code strukturierter schreiben könnte.

Ganz lesenswert - auch wenn man sich nicht an alles halten muss - ist "Perl Best Practices" von Damian Conway.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2006-04-24 13:09
#51025 #51025
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Quote
meistens gibt es bei Abfragen einen Hauptblock.

dieser sollte mit gleichwertigen
{
}

geschrieben sein. inf " if () { " zerstört dieses konzept, und erschwert die fehlersuche
Nein, erschwert es nicht, warum habe ich vorigen Post erläutert.
Quote
Zudem habe ich gemerkt, das man immer wenn man "if() {" schreiben könnte gerade so gut einen Einzeiler machen kann.
Häh?? Die Kausalität verstehe ich nicht...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 ... 4 5 6 7 8 9 10 ... 17 >| >> 169 Einträge, 17 Seiten



View all threads created 2003-09-11 23:56.