User ohne JS ausschließen

ThiKool

Erfahrenes Mitglied
Hallo Leute,

da mein aktuelles Projekt zwingend angeschaltetes Javascript benötigt bin ich auf der Suche wie ich am besten prüfe ob der User JS aktiviert hat.

Ich habe mir folgendes überlegt:

Überlegung 1:
Per JS einen Cookie zu erstellen und dann per PHP zu prüfen ob der Cookie exisitert - wenn nicht Fehlermeldung ausgeben.
Meine Frage dazu:
Wie einfach ist es und ist es möglich so einen Cookie zu manipulieren bzw. selbst (über Dev Tools o.Ä.) zu erstellen.

Überlegung 2:
Ein Logfile pro User zu erstellen in das per JS je Seitenaufruf der aktuelle Zeitstempel geschrieben wird.
Ebenfalls wird per PHP ein Zeitstempel in dieses File geschrieben.
Anschließend wird überprüft ob die zwei Zeitstempel überein stimmen - wenn nicht Fehlermeldung.

Was haltet ihr davon und gibt es evtl einen besseren Lösungsansatz?

Danke euch
 
Hi

Möglichkeit 3: EIne Meldung ins HTML einbauen, dass die Seite ohne JS nicht geht, und bei onload mit JS entfernen.
Wenn der Nutzer die Seite trotzdem ausprobiert wird er/sie dann wohl merken, dass es nichts bringt.

Jedenfalls, Möglichkeit 1 hat mehrere Probleme: a) Der erste Seitenaufruf, b) wie du schon sagst leicht manipulierbar. (Aber warum ist es ein Problem, wenn das Cookie manipuliert wird? ... ist das JS zwingend, weil die Seite sonst nicht funktioniert, oder weil du es einfach gern so hättest?)

Bei Möglichkeit 2: Die Zeitstempel werden auch mit JS oft unterschiedlich sein.
 
Zuletzt bearbeitet:
Hi, danke erstemal,

nein wichtige Elemente der Seite funktionieren ohne JS nicht und das ist bewusst so gemacht, desshalb möchte ich es schon restriktiv machen wie z.B. Facebook.
Dort wird beispielsweiße dann auch nur noch die Fehlermeldung ausgegeben und man kann FB so nicht mehr nutzen. Hast du eine Idee wie die das dort machen?

Zeitstempel in JS unterschiedlich?
Wenn ich ihn per php über ein data-objekt übergeben, ist der Stempel doch gleich? Muss ja nicht zwingend ein Zeitstempel sein, kann ja auch ein Hash - Code sein oder sowas - meinst das funktioniert so nicht?
 
Hab zwar keine Ahnung, wie genau es bei Facebook ausschaut, aber vermutlich ist es so eine Art Overlay, damit man dahinter beim eigentlichen Inhalt nichts bedienen kann?

Versuch sowas (abgeändert von http://codepen.io/imprakash/pen/QjELaZ/):
HTML:
Innerhalb von Body:

Hierher der normale Seiteninhalt

<div id="popup1" class="overlay">
	<div class="popup">
		<h2>Überschrift vom Popup</h2>
		<a class="close" href="#popup1">&times;</a>
		<div class="content">
                Popupinhalt
		</div>
	</div>
</div>
CSS:
*, *:after, *:before {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

.popup h2 {
  margin-top: 0;
  color: #333;
  font-family: Tahoma, Arial, sans-serif;
}
.popup .close {
  position: absolute;
  top: 20px;
  right: 30px;
  transition: all 0.2s;
  font-size: 30px;
  font-weight: bold;
  text-decoration: none;
  color: #333;
}
.popup .close:hover {
  color: #06D85F;
}
.popup .content {
  max-height: 30%;
  overflow: auto;
}

/*Let's make it appear when the page loads*/
.overlay:target:before {
    display: none;
}
.overlay:before {
  content:"";
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  display: block;
  background: rgba(0, 0, 0, 0.6);
  position: fixed;
  z-index: 9;
}
.overlay .popup {
  background: #fff;
  border-radius: 5px;
  width: 30%;
  position: fixed;
  top: 0;
  left: 35%;
  padding: 25px;
  margin: 70px auto;
  z-index: 10;
  -webkit-transition: all 0.6s ease-in-out;
  -moz-transition: all 0.6s ease-in-out;
  transition: all 0.6s ease-in-out;
}
.overlay:target .popup {
    top: -100%;
    left: -100%;
}

@media screen and (max-width: 768px){
  .box{
    width: 70%;
  }
  .overlay .popup{
    width: 70%;
    left: 15%;
  }
}

Zu den Timestamps: Ich hab dein Vorgehen vorher nicht ganz verstanden gehabt.
 
Es scheint weitergeleitet zu werden, da in der Adresszeile dann folgender Paramenter mitgegeben wird: "?_fb_noscript=1"
Hast du eine Idee wie die das dort machen?
Ein kurzer Blick in deren Quellcode hat meine Vermutung bestätigt :cool:

Kein Cookie, kein Timestamp, sondern ganz ordinäres <noscript></noscript> :)
facebook.com hat gesagt.:
HTML:
<noscript><meta http-equiv="refresh" content="0; URL=/?_fb_noscript=1" /></noscript>
 
Zuletzt bearbeitet:
Ohjee, da hätte ich auch drauf kommen können, danke dir :)

Wie zuverlässig ist das <noscript> Tag? Habe gehört, dass man das ebenfalls manipulieren bzw. ignorieren kann.

Danke euch
 
Natürlich kann man das manipulieren, wie alles andere auch.
Eine sichere Lösung, dass wirklich nur User mit JS deine Seite sehen, existiert nicht.

Ich frag mich allerdings noch immer, warum die Nicht-Umgehbarkeit davon so wichtig ist.
 

Neue Beiträge

Zurück