MyBB.de Forum
[NG] Unsichere Cookies - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: MyBB 1.8.x (https://www.mybb.de/forum/forum-87.html)
+--- Forum: Bugs (https://www.mybb.de/forum/forum-90.html)
+---- Forum: Gemeldete/Nicht gemeldete Bugs (https://www.mybb.de/forum/forum-92.html)
+---- Thema: [NG] Unsichere Cookies (/thread-36356.html)



[NG] Unsichere Cookies - kettwiesel - 27.03.2019

Hallo MyBB Deutschland, schön mal wieder bei euch zu sein.

MyBB sicherer machen.

Tipp 1.

Ich habe einen Fehler gefunden und wollte euch diesen Tipp geben da das anscheinend bis jetzt keiner bemerkt hat. Und zwar, bin ich dabei ein Forum aufzubauen was so sicher wie nur irgendwie möglich sein soll, also habe ich mit diversen Online Tools das Forum ab scannen lassen um zu sehen wo man was verbessern könnte.

Dabei hat sich herausgestellt, das das Forum trotz HTTPS Verbindung unsichere Cookies verwendet. So wurde es mir angezeigt. Erst dachte ich ok, der Fehler scheint bei mir zu liegen, oder am Server selbst  also habe ich mal alle möglichen Foren  die ich so kenne besucht und darauf geprüft, das Ergebnis? Es ist überall das gleiche, auch bei eurer Seite hier wurde das so angezeigt.

Ich dachte erst das ist ein Problem von irgendeinem Plugin, aber weit gefehlt ist es nicht, denn bei einer neuen Nackten Installation ist es auch da. Dazu sei auch gesagt, es kann durchaus Sinn machen das so zu belassen wein ein Server neu aufgebaut wird!

Die Option, in der Konfiguration nur Sichere Cookies an oder abzuwählen in MyBB selbst ist wirkungslos! Fals jemand denkt man müsste nur dort einen Haken setzen.

Lange Rede Kurzer Sinn....

Die Lösung mit den Ungesicherten Cookies ist ganz einfach.

man rufe die Seite auf https://www.ionos.de/tools/website-check auf gibt seine Seite ein, dann seht ihr den Fehler mit den Unsicheren Cookie.

Lösung:

Öffnet die Datei Forum/inc/funktions.php

in der Zeile 1873 (so zumindest bei mir) Aktuelle letzte Version 1.8 X

dort ist die Zeile

PHP-Code:
function my_setcookie($name$value=""$expires=""$httponly=false$samesite=""
ändern in
PHP-Code:
function my_setcookie($name$value=""$expires=""$httponly=true$samesite=""

Ändert es von false auf true, und siehe da die Kiste ist Sicher ! Den Onlinecheck noch mal drüber laufen lassen zum Prüfen fertig.

Wünsche frohes gelingen.
############################################
Tipp 2.

Und noch ein Tipp nebenbei erwähnt in Bezug auf die .htaccess Datei.

in die .htaccess Datei fügt man folgende Zeile ein, dann hat man 100% bei den Sicherheitstests.

Achtung für Updates ist es besser wenn man vorher die htaccess Datei so hochläd wie sie im Originalzustand ist! Sonnst kommt es zu Fehlern beim Update! Und nach dem Update kann man diese ja wieder hochladen.

PHP-Code:
<IfModule mod_env.c>
# Add security and privacy related headers
Header set X-Content-Type-Options "nosniff"
Header set X-XSS-Protection "1; mode=block"
Header set X-Robots-Tag "none"
Header set X-Download-Options "noopen"
Header set X-Permitted-Cross-Domain-Policies "none"
Header set Referrer-Policy "no-referrer"
SetEnv modHeadersAvailable true
</IfModule

Tipp 3.

Wer Proxys Sperren will

PHP-Code:
###Standard Proxysperre
<ifModule mod_rewrite.c>
RewriteEngine on
RewriteCond 
%{HTTP:VIA                !^$ [OR]
RewriteCond %{HTTP:FORWARDED          !^$ [OR]
RewriteCond %{HTTP:USERAGENT_VIA      !^$ [OR]
RewriteCond %{HTTP:PROXY_CONNECTION   !^$ [OR]
RewriteCond %{HTTP:XPROXY_CONNECTION  !^$ [OR]
RewriteCond %{HTTP:HTTP_PC_REMOTE_ADDR} !^$ [OR]
RewriteCond %{HTTP:HTTP_CLIENT_IP     !^$
RewriteRule .* - [F]
</
ifModule>
### Ende Standard Proxysperre 

Tipp 4.

Quasi eine Firewall

PHP-Code:
### Firewall - 
<IfModule mod_rewrite.c>
ServerSignature Off
Options 
-Indexes
RewriteEngine On
RewriteCond 
%{REQUEST_URI} (settings\.php|config\.php|wp-config\.php|bb-config\.php) [NC,OR]
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php|debug\.log|error.log|attacks.log) [NC,OR]
RewriteCond %{REQUEST_URI} \.(htaccess|htpasswd|errordocs|logs|po|mo|ini|inc)$ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUESTetc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} (\?|\*|%2a)+(%20+|\\s+|%20+\\s+|\\s+%20+|\\s+%20+\\s+)HTTP(:/|/) [NC,OR]
RewriteCond %{HTTP_REFERER} (%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{THE_REQUEST} (`|<|>|'|"|%0A|%0D|%27|%3C|%3E|%00|%60|\\r|\\n) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (
`|<|>|'|"|%0A|%0D|%27|%3C|%3E|%00|%60|\\r|\\n) [NC,OR]
RewriteCond %{QUERY_STRING} (`|<|>|'
|"|%0A|%0D|%27|%3C|%3E|%00|%60|\\r|\\n) [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|%2e%2e%2f|%2e%2e/|\.\.%2f|%2e\.%2f|%2e\./|\.%2e%2f|\.%2e/) [NC,OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR] 
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^e]*e)+mbed.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*object.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^o]*o)+bject.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\(|\)|<|>|%3c|%3e).* [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\x00|\x04|\x08|\x0d|\x1b|\x20|\x3c|\x3e|\x7f).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\.{1,}/)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} \-[sdcr].*(allow_url_include|allow_url_fopen|safe_mode|disable_functions|auto_prepend_file) [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|`|'|"
|\)|%0A|%0D|%22|%27|%3C|%3E|%00|%60).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
###RewriteCond %{HTTP_COOKIE} (;|<|>|`|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00|%60).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ https://HINWEISSEIT.HTML [QSA,L]
</IfModule>
# Ende Firewall ### 

Die HINWEISSEITE.HTML müsst ihr natürlich erstellen.

die Zeile
PHP-Code:
###RewriteCond %{HTTP_COOKIE} (;|<|>|`|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00|%60).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR] 
sollte man ausklammernt lassen, weil diese Zicken machen kann, weil wenn der seiten Besucher vor und zurück klickt, scheißt ihn die Seite raus !

Und zwecks SSL allgemein um das nicht zu vergessen....

PHP-Code:
RewriteBase /forum/

RewriteEngine On
RewriteCond 
%{HTTPS} !=on
RewriteRule 
https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

##################
 Oh hätte ich fasst vergessen... Wer diverse Länder aussperren will, beispielsweise wer eh nur ein Deutsches Forum betreibt....

Dieses Beispiel lässt, Deutschland, Österreich, Schweiz und Russland zu alles andere nicht.

PHP-Code:
####Ländersperre
RewriteEngine on
RewriteCond 
%{HTTP:Accept-Language} (gb|uk|fr|aa|at|cz|ab|jo|il|li|iq|lb|pk|sy|af|am|ar|sk|as|ay|az|ba|be|bg|bh|bi|bn|bo|br|ca|co|cy|dz|el|eo|es|et|eu|fa|fj|fo|fy|ga|gd|gl|gn|gu|gr|ha|hi|hr|hu|hy|ia|ie|ik|in|is|it|iw|ja|ji|jw|ka|kk|kl|km|kn|ko|ks|ku|ky|la|ln|lo|lv|mg|mi|mk|ml|mn|mo|mr|ms|mt|my|na|ne|nl|oc|om|or|pa|pl|ps|pt|qu|rm|rn|ro|rw|sa|sd|sg|sh|si|sl|sm|sn|so|sq|sr|ss|st|su|sv|sw|ta|te|tg|th|ti|tk|tl|tn|to|tr|ts|tt|tw|uk|ur|uz|vi|vo|wo|xh|yo|zh|zu) [NC]
RewriteRule .* https://DEINESEITE/sorry.html [R,L]
#### Ländersperre Ende 
sorry.html musst du erstellen und sollte der Hinweis sein in Fremdsprache.

Ich kann euch sagen diese Kombination ist Gold wert, hält einen viele Plage Geister vom Hals. eine 100% Sicherheit wird es nie geben, aber das ist echt äußert wirkungsvoll, weil es eben auf Serverebene schon greift.

Hier mal ein Bildschirmausdruck der Meldung damit ihr das besser versteht was ich meine.

   


RE: Unsichere Cookies - StefanT - 27.03.2019

Hier liegt kein Bug vor. Dir scheint die Funktionsweise der Attribute HttpOnly und Secure nicht klar zu sein.
HttpOnly sorgt dafür, dass ein Cookie nicht per Javascript ausgelesen werden kann. Dieses Attribute wird bei den Authentifizierungs- und Session-Cookies gesetzt, andere Cookies sind entweder nicht schützenswert oder werden für Javascript-Funktionen benötigt.
Secure verhindert, dass die Cookies auch über eine unverschlüsselte HTTP-Verbindung übertragen werden. Diese Option sollte nur aktiviert werden, wenn das Forum ausschließlich über HTTPS erreichbar ist.

Bei den anderen Tipps kann ich nur zur Vorsicht raten. Dabei handelt es sich nicht um Empfehlungen, die bedenkenlos übernommen werden sollten.
Für die HTTP-Header gibt es besser Guides und Vorschläge, unter anderem in der MyBB-Dokumentation, bei Mozilla und https://securityheaders.com/

Tipp 3 und 5 sperren sehr leicht legitime User sowie Suchmaschinen aus und die Schutzwirkung von Tipp 4 ist eher fraglich.


RE: [NG] Unsichere Cookies - kettwiesel - 27.03.2019

Aha verstehe, werde mir das alles in ruhe ansehen. Habt ihr dafür nicht eine Beispielvorlage die man dann anpassen kann, danke im Voraus.


RE: [NG] Unsichere Cookies - StefanT - 28.03.2019

So wie in der verlinkten MyBB-Dokumentation?