|
|
| Perl Monk, Perl Meditation | |
| PerlMonks |
Re^2: Security techniques every programmer should knowby legato (Monk) |
| on Dec 27, 2004 at 20:21 UTC ( #417625=note: print w/ replies, xml ) | Need Help?? |
|
Your code will call anything with whitespace an unsafe string. While that's much better than no checking, how about: That will sanitize all strings to contain only numbers, digits, the underscore and whitespace. A more complete regex (which would still not include unicode or international chars) would be: (Yes, there's more escaping there than strictly necessary.) Suddenly, that transliteration is looking a lot easier to maintain. If your allowed set is "everything but nulls and control chars", then you're better off explicitly excluding the known control-char set. Denying all, then allowing is a good general rule of thumb. But, in this case, the "dangerous" items are a fixed set while the "safe" items are much more variable -- so it makes sense to simply remove that which is dangerous. Update=> Aristotle reminded me that, as \s includes \n, these regexes will not strip newlines; that means strings sanitized with these will be unsafe if executed with a shell (e.g. system("$string");). This further shows that inclusion-matching isn't as good, in this case, as merely stripping "bad" data out. Anima Legato
In Section
Meditations
|
|
||||||||||||||||||||||||