Im Post von gestern habe ich kurz erklärt, worum es beim Cross Site Scripting geht. Jetzt geht es jedoch darum, das ganze noch ein wenig auszuweiten. Bisher ging es ja vor allem um triviale/offensichtliche Sicherheitslücken.
Es geht aber unter Umständen viel heimtückischer zum Beispiel mit Bildern. Z.B. das Bild unten von der netten kleinen Katze, aber diese Katze hat es in sich.
Schauen wir uns nämlich die Exif Daten dieses Bildes an, so werden wir sehen, dass es einen XSS Angriff enthält:
Color Space | sRGB |
Components Configuration | YCbCr |
Compressed Bits Per Pixel | 4 |
Compression | JPEG (old-style) |
Create Date | 2000:12:31 15:20:13 8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago |
Date/Time Original | 2000:12:31 15:20:13 8 years, 3 months, 6 days, 17 hours, 1 minute, 43 seconds ago |
Exif Image Size | 600 × 450 |
Exif Version | 0210 |
Exposure Compensation | 0 |
Exposure Program | Program AE |
Exposure Time | 1/112 |
F Number | 6.0 |
File Source | Digital Camera |
Flash | No Flash |
Flashpix Version | 0100 |
Focal Length | 15.8 mm |
ISO | 80 |
Image Description | |
Interoperability Index | R98 – DCF basic file (sRGB) |
Interoperability Version | 0100 |
Light Source | Unknown |
Make | <script type="text/javascript">alert("xss");</script> |
Max Aperture Value | 2.5 |
Metering Mode | Multi-segment |
Camera Model Name | <script type="text/javascript">alert("xss");</script> |
Modify Date | 2009:04:07 17:21:04 8 hours, 59 minutes, 8 seconds ago |
Orientation | Horizontal (normal) |
Resolution | 72 pixels/inch |
Scene Type | Directly photographed |
Software | GIMP 2.6.2 |
Thumbnail Length | 6,271 |
User Comment | |
X Resolution | 300 |
Y Cb Cr Positioning | Co-sited |
Y Resolution | 300 |
Würde ich jetzt auf meiner Applikation den Exif Wert "Camera Model Name" einfach so ausgeben würde, dann würde eine hübsche kleine Javascript Message Box mit xss erscheinen… oder es lassen sich eben auch noch andere Dinge machen. Das wäre eine massive Sicherheitslücke einer Applikation.
In Drupal verwendet man dazu am Besten die check_plain() Funktion, welche eben dafür schaut, dass keine bösen Sachen reinkommen. Beim Entwickeln von Anwendungen also nicht immer nur die offensichtlichen Sicherheitslücken beachten sondern auch weniger offensichtliche aber dennoch gefährliche.