Qualitätssicherung Digitale/Web Projekte: Difference between revisions
David Smith (talk | contribs) No edit summary |
David Smith (talk | contribs) |
||
| Line 333: | Line 333: | ||
TODO: Explain "No-Password" Rule - only public certificates. | |||
=Webapp= | =Webapp= | ||
Revision as of 09:27, 30 April 2015
Meta Angaben und Informationen
- Existiert ein Fav Icon und ist dies richtig eingebunden? (Sample Code)
<head>
<link rel="icon" href="http://www.{Domain.Endung}/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="http://www.{Domain.Endung}/favicon.ico" type="image/x-icon" />
</head>
- Webpage Icons
<link rel="apple-touch-startup-image" href="/startup.png 320 x 460 px">
<link rel="apple-touch-icon-{precomposed}" href="touch-icon-iphone.png" />
<link rel="apple-touch-icon-{precomposed}" sizes="72x72" href="touch-icon-ipad.png" />
<link rel="apple-touch-icon-{precomposed}" sizes="114x114" href="touch-icon-iphone-retina.png" />
<link rel="apple-touch-icon-{precomposed}" sizes="144x144" href="touch-icon-ipad-retina.png" />
- Existieren die Basis Meta Angaben?
<title>{Titel}</title>
<meta name="description" content="{Beschreibung}">
<meta name="keywords" content="{Keyword1}, {Keyword2}, ...">
<meta name="revisit-after" content="5days">
<meta name="robots" content=" follow">
- Existiert ein Impressum und sind die Pflichtabgaben hinterlegt?
Die Pflichtabgaben sind in der deutsche Fassung:
{Firmenname und Rechtsform}
{Strasse}
{Land}-{PLZ} {Ort}
Amtsgericht {Stadt}, HRB {Nummer} (Verpflichtend, wenn ein Handelsregistereintrag vorliegt)
Ust-ID Nr.: DE{Nummer}
Telefon: +49 ({Vorwahl}) {Telefon}
E-Mail: {eMail Adresse}
Geschäftsführer und inhaltlich Verantwortlicher gemäß § 55 Abs. 2 RStV: {Name/n Geschäftsführer}
Auf Englisch:
{Firmenname und Rechtsform}
{Strasse}
{Land}-{PLZ} {Ort}
Local Court of {Stadt}, HRB {Nummer} (Verpflichtend, wenn ein Handelsregistereintrag vorliegt)
VAT ID No.: DE{Nummer}
Telephone: +49 ({Vorwahl}) {Telefon}
E-Mail: {eMail Adresse}
Managing Director and responsible under Sec. 55 para. (2) RStV: {Name/n Geschäftsführer}
- Copyright
© <?php date("Y"); ?> {Firmenname}. Alle Rechte vorbehalten.
- Existiert eine Goole Sitemap?
http://support.google.com/webmasters/bin/topic.py?hl=de&topic=8476 http://www.xml-sitemaps.com
- Wurde die Seite bei Google angemeldet?
http://www.google.com/addurl/?continue=/addurl
TODO: Suggest WordPress plugin
Fehlerseiten
- Fehlerseiten
Jede Parasol Website hat individuelle Fehlerseiten, für den Fall, das eine Seite nicht gefunden wird, nicht mehr verfügbar ist oder der User darauf keinen Zugriff hat. Die abgefangenen Fehler lauten wie folgt: Fehlercode Statustext Beschreibung
401 Unauthorized Der Benutzer benötigt eine Autorisierung, ohne die er keinen Zugriff hat. 403 Forbidden Nicht öffentlicher Bereich, auf den der Benutzer keinen Zugriff hat. 404 Not Found Die Ressource wurde unter dem angegebenen URI nicht gefunden.
Die Fehlerseiten bestehen ausschließlich aus HTML und sind klar als Fehlerseiten erkennbar. Die Fehlermeldung ist verständlich dargestellt und beschrieben. Der User hat die Option per Link auf die Homepage zurück zu kommen und wird zusätzlich nach 10 Sekunden automatisch mit folgendem Code per Forward auf die Homepage weitergeleitet.
<head> <meta http-equiv="refresh" content="10; URL=http://www.{Domain.Endung}/"> </head>
Basis Suchmaschinen Optimierung
- h1
- robots.txt
user-agent:*
disallow: {Verzeichnisse, die nicht indiziert werden sollen, wie z.B. /images, /cgi-bin oder /private}
disallow: ...
TODO: Suggest reading modes for H1, H2 etc. (iOS Safari - Read Mode, Evernote Read Mode etc.)
Kompatibilität
Wir testen wenn nicht anders aktiv vereinbart auf
- IE ab Version 9
- Safari Mac ab Version {Aktuelle Version -1 Versionsnummer}
- Safari PC ab Version {Aktuelle Version -1 Versionsnummer}
- Chrome Mac ab Version {Aktuelle Version}
- Chrome PC ab Version {Aktuelle Version}
- Firefox Mac ab Version {Aktuelle Version}
- Firefox PC ab Version {Aktuelle Version}
Zur Vereinfachung des Testens haben wir einen Account bei https://crossbrowsertesting.com, der Login liegt in der Passwortdatenbank.
Google Accounts
Für jeden Kunden legen wir ein Google Konto (z.B. GoogleMail(Konto erstellen) nach dem an Muster
{kunde}.parasolisland@googlemail.com
an. Das Passwort muss stark sein und wird in der Passwort Datenbank gespeichert.
Google Analytics
URL: http://www.google.com/analytics/
Analytics Account für jede Webseite einrichten. Für jede neue Aktion ein eigenes Profil einrichten. Unter diesem Profil dann die produzierten Webseiten einrichten.
Google Webmaster Tools
URL: https://www.google.com/webmasters/tools/
Zum Setup des Webmaster Tools Account muss eine HTML Seite in den Webspace geladen werden. Beim Setup des Profils wird diese zum Download angeboten.
<meta property="og:image" content="{path to 500x500 Pixel, JPEG/PNG}"/>
<meta property="og:title" content="{Titel}"/>
<meta property="og:description" content="{Description}" />
<meta property="og:url" content="{canonical address}"/>
TODO: Recommend using Facebook Debugger: https://developers.facebook.com/tools/debug/og/object?q=http%3A%2F%2Fwww.parasol-island.com
Datenschutz
Sobald personenbezogene Daten erhoben werden (Dies geschieht in der Regel schon in einem Kontaktformular oder eine Analysesoftware wie Google Analytics) muss die Webseite eine Datenschutzerklärung aufweisen. Dazu ist eine Verschlüsselung der Datenübertragung mithilfe eines SSL Zertifikates notwendig (https://).
TODO: Suggest speaking to Peter re: SSL
Anwendungs-Sicherheit
- SySS Input aus Toom Projekt
Server Sicherheit
Server Konfiguration
Best Practice Setup ist die Server Konfiguration wie HE psl-srv02.
Host
Den Host Zugriff auf den Root Server beschränken. Keine eigenen SSH Zugänge in die vServer. SSH Port auf 24480 verstellen und mit IP Table einschränken. Sehr Starkes Passwort (200bit) für root User. Zugriff weiterer User auf den localhost beschränken.
Datenbank Server
Den Datenbank vServer nur innerhalb des Root Servers verfügbar machen. Sehr starke (200bit) PW Datenbank Passwörter verwenden. Der DB Server hat keine eigene, nur eine interne IP.
Datenbank & Datenbank Design
phpMyAdmin
phpMyAdmin vollständig inkl. der nötigen Sicherheitsbibliotheken installieren. phpMyAdmin "verstecken" (bsp. website.de/IofkLU2PhA5QN3i8YyxXREapC/) und im Produktivbetrieb aus dem webroot verschieben. phpMyAdmin ausschliesslich auf die Produktiv Datenbank, nie auf den root User konfigurieren. phpMyAdmin per .htaccess (Username und Userpasswort stark, bsp. User: KM9f6ZzPVDuLToavCphqUGwmJ / Pas: F17WzDAghjnGUSTOE0pKBVx9L) und auf unsere/die des Kunden IP Adressen beschränken.
Immer so wenig Daten wie möglich speichern. Besondere Aufmerksamkeit bei personenbezogenen Daten (http://de.wikipedia.org/wiki/Personenbezogene_Daten)
Datenbank Tabelle verschlüsseln (Sonderaufwand, zusätzlicher Kalkulationsbestandteil)
Datenbank/Datenbanken Spalten mit personenbezogenen oder sensiblen Daten mit "mCrypt" & "Triple DES (56 Bit)" als "BASE 64" encodieren.
| Ausführliches Beispiel |
|---|
ideas` (`id`, `created`, `modified`, `title`, `name`, `lastname`, `email`, `street`, `zip`, `city`, `descr`, `push`, `materials`, `category_id`, `approved`, `active`, `views`, `votes`, `deleted`, `winner`) VALUES (4659, '2011-08-12 15:01:43', '2011-08-12 15:01:43', 'Titel', 'X8UrUA8ug8U=', 'X8UrUA8ug8U=', 'g5RuiljQfDKpxxj1LXoK4qQg4Tya6udb', 'pN4NBpnRrO6PFfDxkZNQl7pwjbSLMoXG/ORmcyYGe6UupbTqIl8JUa2CAKuLgKAf', 12345, 'U5JBgt9zuiiSXB2uw9g0Pw==', 'Wie', 'Idee', , 5, 0, 0, 0, 0, 0, 0); |
Webserver
NGINX oder lighthttpd bevorzugt.
Ports
Port 80 und 443 öffnen, restliche Ports schliessen. Kein! Dateizugriff auf den Webserver per ftp. File- und Wartungszugriff ausschliesslich über Hostsystem.
https
Sobald Daten (und sei es nur ein Kontaktformular) übertragen werden, komplette Seite verpflichtend in https laufen lassen. Ein gültiges Zertifikat ist hierfür erforderlich.
Informationen über Webserver unterbinden
Produktnamen
Ausgabe des Webserver Produktnamen unterbinden. Bsp.
| Ausführliches Beispiel |
|---|
Unverschlüsselter Verbindungsaufbau über Port 80: nc 92.51.175.186 80 OPTIONS / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 12 Aug 2011 16:10:43 GMT Server: Apache Set-Cookie: PHPSESSID=tq57fvr7dgcra4q8lvbh2qndq3; path=/ P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" Vary: Accept-Encoding Connection: close Content-Type: text/html; charset=UTF-8 Verschlüsselter Verbindungsaufbau über Port 443: openssl s_client -connect 92.51.175.186:443 -quiet (...) OPTIONS / HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 12 Aug 2011 16:13:02 GMT Server: Apache Set-Cookie: PHPSESSID=ufr7ac6abir77chv02sjp86o67; path=/; secure P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM" Vary: Accept-Encoding Connection: close Content-Type: text/html; charset=UTF-8 |
Apache Icons
Deinstallation Apache Icons (/icons/)
Multiviews
Deaktivieren der Funktion Apache Multiviews
| Ausführliches Beispiel |
|---|
|
Es wurde festgestellt, dass über den nachfolgenden exemplarischen Aufruf das Raten von Dateinamen begünstigt wird. Durch Raten von Dateinamen wird durch die aktivierte Funktion Multiviews werden selbst bei nicht exakten Tre�ern alternative Dateinamen vorschlagen, die einem Angreifer unter Umst¨anden hilfreich sein können. nc 92.51.175.186 80 GET /index HTTP/1.1 Accept: foobar Host: 92.51.175.186 HTTP/1.1 406 Not Acceptable Date: Thu, 11 Aug 2011 07:57:12 GMT Server: Apache Alternates: "index.php" 1 type application/x-httpd-php Vary: negotiate,Accept-Encoding TCN: list Content-Length: 361 Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>406 Not Acceptable</title> </head><body> Not AcceptableAn appropriate representation of the requested resource /index could not be found on' this server. Available variants:
</body></html> |
TCP Timestamp Requests unterbinden
Das System antwortet auf TCP Timestamp Requests. Dadurch kann die Laufzeit des Systems ermittelt werden. Aufgrund langer Systemlaufzeiten lassen sich R¨ uckschl ¨ usse auf nicht installierte Kernel-Patches ziehen, da diese mit einem Neustart des Systems verbunden sind. Die SySS GmbH empfiehlt, das Beantworten derartiger Anfragen zu unterbinden1. Nachweis auf Port 80: hping2 -S -p 80 -c 2 --tcp-timestamp 92.51.175.186 HPING 92.51.175.186 (eth0 92.51.175.186): S set, 40 headers + 0 data bytes len=56 ip=92.51.175.186 ttl=58 DF id=0 sport=80 flags=SA seq=0 win=5792 rtt=17.3 ms TCP timestamp: tcpts=56786332 len=56 ip=92.51.175.186 ttl=58 DF id=0 sport=80 flags=SA seq=1 win=5792 rtt=14.9 ms TCP timestamp: tcpts=56786582 HZ seems hz=100 System uptime seems: 6 days, 13 hours, 44 minutes, 25 seconds Nachweis auf Port 443: hping2 -S -p 443 -c 2 --tcp-timestamp 92.51.175.186 HPING 92.51.175.186 (eth0 92.51.175.186): S set, 40 headers + 0 data bytes len=56 ip=92.51.175.186 ttl=58 DF id=0 sport=443 flags=SA seq=0 win=5792 rtt=14.3 ms TCP timestamp: tcpts=57236359 len=56 ip=92.51.175.186 ttl=58 DF id=0 sport=443 flags=SA seq=1 win=5792 rtt=14.2 ms TCP timestamp: tcpts=57236609 HZ seems hz=100 System uptime seems: 6 days, 14 hours, 59 minutes, 26 seconds
Denial of Service-Angriff auf Webserver-Dienst erschweren
W¨ahrend des Projektzeitraumes wurde erkannt, dass der eingesetzte Apache-Webserver f ¨ ur Denial of Service-Angri�e verwundbar ist. Konkret konnte derWebserver innerhalb von drei Sekunden nach Beginn des Angri�s mit dem Tool Slowloris2 lahm gelegt werden, indem er (auf beiden TCP-Ports) nicht mehr erreichbar war. Sobald der Angri� eingestellt wird, ist derWebserver umgehend wieder erreichbar. Das Problem hierbei ist in dergew¨ahlten Software-Architektur innerhalb desApache-Webservers begr ¨ undet. Die SySS GmbH empfiehlt, ein anderes Software-Produkt alsWebserver-Dienst zu verwenden. slowloris.pl --dns 92.51.175.186 Welcome to Slowloris - the low bandwidth, yet greedy and poisonous HTTP client Defaulting to port 80. Defaulting to a 5 second tcp connection timeout. Defaulting to a 100 second re-try timeout. Defaulting to 1000 connections. Multithreading enabled. Connecting to 92.51.175.186:80 every 100 seconds with 1000 sockets: Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets. Building sockets.
2http://ha.ckers.org/slowloris/
PHP
"safe_mode = On"
"allow_url_fopen = Off"
Verpflichtend. Sofern allow_url_fopen gebraucht wird, dies durch bsp. libcurl anpassen.
TODO: Explain "No-Password" Rule - only public certificates.
Webapp
- XSS unterbinden (<script>alert(XXS)</script>)
CMS
Ausgabe des Framework-/Produkt-Name des CMS vermeiden
Auf der Login-Seite https://92.51.175.186/admin/users/login ist ein Schriftzug von Cake- PHP zu sehen. Dies gibt den Namen des verwendeten PHP-Frameworks preis.
- Keine Usernamen wie "admin" oder "root" verwenden.
- Passwortrichtlinie/starke Passwörter erzwingen
- Autocomplete im Login ist ausgeschaltet.
- Default user ist nicht löschbar
- https: erzwingen
- CAL/IP Tables einsetzten
Frontend
https://92.51.175.186/ideas/add280b7"><script>alert(1)</script>
HTTPS Caching wir für das Backend unterbunden.
Session Fixation ist nicht mehr möglich.
Cross-Site Request Forgery ist nicht mehr möglich.
IP-Adresse 92.51.175.186:
Webserver-Dienst ist anf¨allig f ¨ ur
Denial of Service-Angri�e
Anderes
Webserver-Produkt
einsetzen
Hoch 2.5
Seite 14
I1.1 IP-Adresse 92.51.175.186:
Webserver-Banner gibt
Produktnamen Apache preis
(TCP-Port 80/443)
Dieses Verhalten
unterbinden
Info 2.2.1
Seite 10
I1.2 IP-Adresse 92.51.175.186:
Installierte Apache-Icons
erm¨oglichen R¨ uckschluss auf
eingesetztesWebserver-Produkt
Apache-Icons vom
System entfernen
Info 2.2.2
Seite 11
I1.3 IP-Adresse 92.51.175.186:
Installierte Apache-Modul
beg ¨ unstigt einfacheres Raten von
Dateinamen
Multiviews-Funktion
deaktivieren
Info 2.2.3
Seite 11
I1.4 IP-Adresse 92.51.175.186:
Das System antwortet auf TCP
Timestamp Requests, wodurch die
Uptime des Systems ausgelesen
werden kann
Deaktivierung dieses
Verhaltens
Login-Formular ohne
autocomplete-Tag
autocomplete-Tag
verwenden
Niedrig
(behoben)
3.2
Seite 19
L2.2 IP-Adresse 92.51.175.186:
Verschiedene Cookies verwenden
das secure-Attribut nicht
secure-Attribut setzen Niedrig 3.3.1.1
Seite 19
L2.3 IP-Adresse 92.51.175.186:
Alle Cookies verwenden das
httpOnly-Attribut nicht
httpOnly-Attribut setzen Niedrig 3.3.1.2
Seite 20
L2.4 IP-Adresse 92.51.175.186:
Session Token PHPSESSID wird
nach korrekter Anmeldung nicht
erneuert
Session Token erneuern
und bisheriges
serverseitig invalidieren
Niedrig 3.3.3
Seite 21
L2.5 IP-Adresse 92.51.175.186:
Inkorrekt eingestellte
Caching-Direktiven erm¨oglichen
Einsicht in zuvor aufgerufene
Daten/Webseiten
Ver¨anderung der
Caching-Direktiven
Niedrig 3.3.4
Seite 21
L2.6 IP-Adresse 92.51.175.186:
Applikation ist anf¨allig f ¨ ur Session
Fixation-Angri�e
Nicht vom System
ausgegebene Session
Tokens verwerfen
Niedrig 3.3.5
Seite 21
I2.1 IP-Adresse 92.51.175.186:
Fehlermeldungen geben aktuellen
Dateisystem-Pfad preis
Derartige Informationen
innerhalb von
Fehlermeldungen nicht
ausgeben
Info 3.1.1
Seite 16
Version 1.0 8
dies ist eine Kopie des gedruckten Dokuments, welches insgesamt 47 Seiten umfasst
Sicherheitstest toom Baumarkt GmbH
- Feststellung Empfehlung Risiko Referenz
I2.2 IP-Adresse 92.51.175.186: E-Mail-Header gibt eingesetztes PHP-Framework preis Optionale Headerzeile X-Mailer entfernen Info 3.1.2 Seite 17 I2.3 IP-Adresse 92.51.175.186: CakePHP-Schriftzug gibt PHP-Framework preis Schriftzug entfernen
robots.txt
Loadtest
Immer auf Produktivsystem entwicklen.