
Ich habe neulich an einer E-Commerce-Website eines Kunden gearbeitet, und ein wirklich beunruhigendes Problem trat auf. Im letzten Schritt des Checkouts, wenn man auf die allerletzte Schaltfläche klickt, um die Bestellung abzuschließen, zeigte der Browser eine Sicherheitswarnung an, die dem Benutzer mitteilte, dass die **Seite** sicher war, aber die übertragenen **Daten** nicht.
Nicht gerade etwas, das jemand beim Online-Shopping sehen möchte.
Ein wenig Nachforschung ergab, dass der Browser nicht paranoid war, er tat seine Arbeit. Die Seite selbst war ordnungsgemäß gesichert, aber die **action URL** des Formulars wurde an eine **unsichere URL** gesendet.
Ich bin mit diesem speziellen Warenkorb ziemlich vertraut, aber nach viel zu langer Recherche konnte ich keinen Code finden, um diese URL zu ändern. Ich habe eine Supportanfrage eingereicht, aber sie waren sehr wenig hilfreich und schoben die Schuld auf meine benutzerdefinierten Modifikationen am Warenkorb (unmöglich). Also... brauchte ich eine bessere Methode, um diese verflixte URL sicher zu machen.
Mit JavaScript erzwingen
Es ist natürlich nicht die perfekte Lösung, dies sollte wirklich auf Kernebene des Warenkorbs geschehen, aber manchmal braucht man einfach eine verdammte Lösung, um weiterzukommen. Hier ist, wie ich es mit jQuery JavaScript gemacht habe:
$(function(){
var $form = $("form#specificForm");
var newAction = $form.attr("action");
newAction = newAction.replace(/http/,"https");
$form.attr("action", newAction);
});
Einfache Sprache
- Cache den Selektor, da wir ihn mehrmals verwenden werden
- Setze eine Variable gleich der action URL
- Ersetze den "http"-Teil des Strings durch "https"
- Ändere das Attribut des Formulars
Erledigt den Trick...
Und dann wenden Sie das Skript mit Greasemonkey an?
Nein, es ist genauso eingebunden, wie jede andere JavaScript-Datei auf der Seite, sodass es alle betrifft.
Ein kleiner Hinweis dazu. Ich bin mir nicht sicher, ob jQuery $() eine Dokumentbereitschaftsprüfung durchführt, aber dies muss ausgeführt werden, NACHDEM das Formular gerendert wurde. Fügen Sie dies also nicht am Anfang Ihrer Seite ein, ohne $(document).ready(..function..).
Guter Beitrag, Chris!
Ich glaube schon. Soweit ich weiß, ist der $(function() Teil eine Abkürzung für die Dokumentbereitschafts-Funktionen.
Ja, das JavaScript, das in $(function() { ... }); eingeschlossen ist, wird ausgeführt, nachdem die Seite vollständig geladen wurde.
Andrew
Nein, es wird nicht ausgeführt, wenn die Seite vollständig geladen ist, sondern wenn das DOM für die Manipulation bereit ist (was in einigen Fällen mit dem onload-Ereignis zusammenfallen kann). Bilder/Iframes/Skripte/Stylesheets müssen nicht geladen sein, damit dies ausgeführt wird.
Netter kleiner Workaround, aber was ist die Lösung für Leute mit deaktiviertem JavaScript?
Keine, deshalb ist es nicht perfekt. Die perfekte Lösung ist, den verdammten Warenkorb dazu zu bringen, die richtige URL einzufügen!
Wahr. Welcher Warenkorb macht das, denn der Support klingt irgendwie flach.
Wenn es ein PHP-Warenkorb ist, können Sie vielleicht die Action (oder vielleicht das Ganze) in eine Funktion packen, die eine serverseitige Suche/Ersetzung durchführt.
So müssen Sie Ihre Benutzer nicht zwingen, JavaScript zu aktivieren.
(oder vielleicht den ganzen < form > Tag)
Dies könnte durch Bearbeitung der Warenkorb-Software selbst erreicht werden, aber ich gehe davon aus, dass Chris nicht durch die Unmengen an Code wühlen wollte, die zur Erstellung eines guten, funktionsreichen Warenkorbs erforderlich sind. Dies ist keineswegs eine perfekte Lösung, aber ein schneller Workaround, der hier Erwähnung wert war.
Andrew
Sie sollten es ändern zu
newAction = newAction.replace(/http:/,”https:”);
damit bestehende sichere Formulare nicht in httpss umschalten
:)
Super, danke für die Verbesserung, Nathan. Glücklicherweise zielt dies bei diesem Formular auf ein bestimmtes Formular anhand seiner ID ab, sodass es kein Problem darstellt, aber ich habe es trotzdem aktualisiert.
Denken Sie daran, wenn jemand dies kopiert und einfügt, ändern Sie diese geschweiften Anführungszeichen im Code zurück in gerade.