Schrift
[thread]12363[/thread]

Wiki: Häufige Fehler und Fallen (Seite 2)



<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
LanX-
 2008-08-18 05:03
#113630 #113630
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
betterworld+2008-08-18 02:12:42--
Was meinst Du mit dem letzten Punkt? Ist das einfach für Leute gedacht, die aus anderen Sprachen gewohnt sind, überall "()" hinzuschreiben?


ja z.B. ich am Anfang!

Ich bin an Perl rangegangen mit dem Eindruck, hei kenn ich ja alles irgendwoher, ich Progge schließlich schon seit 15 Jahren und der Rest wird Learning by Doing. Erst Conways Perl Best Practices hat mir die ganze Problematik eröffnet,(Edit: naja einen großen Teil...)

Stichwort hier: Umsteigerproblem

betterworld+2008-08-18 02:12:42--
Was mir noch so vorschweben würde:
* (1) Unportabilität von "\n"
* (2) Aufpassen mit Benutzereingaben: SQL-Injections (->Wiki:DbiPlatzhalter), CSS, system($var), etc.
* (3) Allgemeine Warnung, dass man eigentlich so gut wie nie "sed", "grep" und Konsorten als externe Programme aufrufen muss, weil man so gut wie alles mit Perl (und CPAN) machen kann


OK aber das betrifft alles nicht mehr nur Fallen im Sprachkern/Syntax, sondern Ratschläge bei Spezialanwendungen

Stichwörter wären hier z.B.:
1. OS-Portabilität
2. Security
3. Abhängigkeiten, Wartbarkeit, Stil

Die gehören vielleicht in Extraartikel???

Mir fällt noch ein

* Scalar Comma Operator

Im Grunde könnte man PBP, die Perl5-Perl6-Unterschiede und die Perldoc-FAQ abgrasen um noch zig Beispiele zu finden.

Oder einfach nach perl pitfalls googeln ;-)

PS: Apropos Security

Viele Leute wissen nicht
* Bei Stringinterpolation kann auch Fremd-Code evaluiert werden !!!
betterworld
 2008-08-18 05:23
#113631 #113631
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
LanX-+2008-08-18 03:03:13--
* Bei Stringinterpolation kann auch Fremd-Code evaluiert werden !!!

Hast Du da ein Beispiel?
LanX-
 2008-08-18 06:19
#113632 #113632
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
man muss sich schon sehr dumm anstellen, um es sagen wir mal in nem CGI soweit kommen zu lassen, aber möglich ist es z.B. wenn man Code generiert:

Code (perl): (dl )
1
2
3
@x=('ich bin lieb');
$bums= " $x[print ('da guckst du'),0]";
print $bums;
betterworld
 2008-08-18 06:54
#113633 #113633
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Hmm, das habe ich eigentlich noch nie als Sicherheitsproblem gesehen.. Damit das jemand ausnutzen kann, müsste ich seine Daten ja direkt in generierten Code oder in eval "" einbetten -- das ist eigentlich immer fatal, wenn man die Daten nicht vernünftig validiert.
pq
 2008-08-18 13:44
#113638 #113638
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
LanX-+2008-08-18 03:03:13--
Viele Leute wissen nicht
* Bei Stringinterpolation kann auch Fremd-Code evaluiert werden !!!

dazu hätte ich auch gerne ein beispiel.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
LanX-
 2008-08-18 14:08
#113640 #113640
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
betterworld+2008-08-18 04:54:00--
das ist eigentlich immer fatal, wenn man die Daten nicht vernünftig validiert.


genau aber "was vernünftig ist" ist hier der Knackpunkt!

wie gesagt man muss sich dumm anstellen...z.B. ein Parser für Templates, wo aus irgendwelchen Gründen beim ersetzen auch evaluiert werden muss

ungetestete Skizze:
Code (perl): (dl )
$input =~s/<TEMP_VAR ([^"]+)>/$x="\$$1"; auswerten($x)/ee: 


dann reicht es nicht sich darauf zu verlassen dass durch Ausschluss von " Missbrauch ausgeschlossen ist, weil ja angeblich in der Interpolation kein Code ausgeführt werden kann.
pq
 2008-08-18 14:37
#113649 #113649
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
LanX-+2008-08-18 12:08:28--
dann reicht es nicht sich darauf zu verlassen dass durch Ausschluss von " Missbrauch ausgeschlossen ist, weil ja angeblich in der Interpolation kein Code ausgeführt werden kann.

in einer interpolation wird auch kein code ausgeführt.
"foo $cgi_var bar"; führt keinen code aus. deswegen finde ich deine aussage
"Bei Stringinterpolation kann auch Fremd-Code evaluiert werden" nicht richtig.

wenn man ein *eval* macht, ist klar, dass man aufpassen muss, und es ist klar, dass das
durchaus mit in die liste kommen kann, aber eine interpolation allein führt nunmal keinen code aus.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
LanX-
 2008-08-18 14:43
#113651 #113651
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Fremdcode war zugegeben übertrieben, weil man wie gesagt noch eine irgendwie geartete Codegenerierung braucht, aber eine Interpolation kann wie gezeigt Code ausführen, und das wissen nicht alle, und machen dann beim untainting evtl. Fehler!
LanX-
 2008-08-18 15:12
#113659 #113659
User since
2008-07-15
1000 Artikel
BenutzerIn

user image
Mal ein anderes Beispiel, jmd generiert personalisierte Scripte und will für die configdaten keine extradatei mitliefern, deswegen kommt am Anfang ein Codestück wo Variablen automatisch gesetzt werden und ein Progger verlässt sich darauf dass durch Einsetzen von
Code (perl): (dl )
 print "\$NAME=\"$param('name')\"" 

im Code nix passieren kann ...
betterworld
 2008-08-18 16:41
#113663 #113663
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
LanX-+2008-08-18 13:12:58--
Mal ein anderes Beispiel, jmd generiert personalisierte Scripte und will für die configdaten keine extradatei mitliefern, deswegen kommt am Anfang ein Codestück wo Variablen automatisch gesetzt werden und ein Progger verlässt sich darauf dass durch Einsetzen von
Code (perl): (dl )
 print "\$NAME=\"$param('name')\"" 

im Code nix passieren kann ...

Dadurch wird doch auch kein Code ausgeführt, oder?

Wenn ich das jetzt im Kopf richtig geparst habe, wird da nur das Skalar $param eingefügt. Da musst Du uns jetzt mal ein Beispiel zeigen, was in $param drin stehen muss, damit da jetzt Code ausgeführt wird... :)

Ich vermute, dass hier ein Verständnisproblem vorliegt. Ich bringe mal eine Analogie:
Code: (dl )
1
2
3
sub foo {
$param;
}

Diese Subroutine gibt $param zurück. Man kann mit Subroutinen auch Code ausführen, aber trotzdem wird jetzt nicht irgendwie der Inhalt von $param evaluiert. Mit Stringinterpolation ist es afaik genau dasselbe. (Ebenso übrigens auch mit s///e -- auch wenn das "e" für eval stehen mag, wird damit nur Code ausgeführt, der schon beim Laden des Scriptes kompiliert wurde -- erst "/ee" ist dann gefährlich.)
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2008-08-16 20:18.