Détecter l'icône de verrouillage cassé (contenu mixte sécurisé / non sécurisé) de Javascript

Je travaille sur la création d'un site entièrement fonctionnel sous HTTPS. Dans le cadre de cela, je voudrais veiller à ce que nous ne "brisons jamais la serrure". Autrement dit, nous ne devons jamais charger de contenu non SSL sur une page SSL, ce qui peut déclencher un avertissement ou un autre indicateur selon le navigateur. Pour vérifier que c'est le cas, j'aimerais faire deux choses:

  1. Écrivez des tests de sélénium qui vérifient diverses actions ne rompent pas le verrouillage.
  2. Écrivez le code d'enregistrement dans JS qui vérifie pendant une session utilisateur si le verrou est cassé et se connecte au serveur s'il l'est.

Existe-t-il une méthode qui peut être utilisée dans JS pour vérifier l'état brisé / non brisé de l'icône de verrouillage HTTPS du navigateur? Ou, de manière équivalente, l'état mixte / non mixte du contenu de la page actuelle?

Il ressemble à CSP de Mozilla (Content Security Policy), implémenté dans Firefox 4, résout partiellement ceci. Il peut limiter le contenu chargé sur votre site aux seuls ports SSL et envoyer un rapport à une URL spécifiée lorsque le navigateur tente de charger quelque chose de non SSL. C'est seulement dans Firefox 4, mais nous avons assez d'utilisateurs FF4 que cela peut servir de système d'alerte précoce.

Mise à jour 8/15: CSP est également pris en charge par Chrome. Je l'ai utilisé efficacement dans la production en tant que système d'alerte précoce pour des erreurs de contenu mixtes. Il ressemble à peu près comme ceci:

X-WebKit-CSP-Report-Only: default-src https: 'unsafe-inline' 'unsafe-eval'; Report-uri / report_mixed_content; Img-src https: // * data:; Frame-src https: // * about: javascript:

Notez qu'il s'agit d'un en-tête très permissif, visant à ne capturer que des erreurs de contenu mixtes. Vous voudrez utiliser X-Content-Security-Policy pour Firefox.

Si vous déployez cela sur un pourcentage de vos utilisateurs, vous obtiendrez des journaux chaque fois que vous déployez accidentellement une erreur de contenu mixte. Pour que cela soit efficace pour les tests de Selenium, vous devez ajouter un gestionnaire de mode de test spécial pour / report_mixed_content qui provoque l'échec du test.

Pour les utilisateurs internes, je l'ai toujours activé en mode force (supprimez le -Report uniquement). Cela permet de s'assurer que les autres développeurs remarquent des erreurs de contenu mixtes dans les nouvelles fonctionnalités avant qu'elles ne soient déployées.

Vous pouvez itérer tout l'DOM entier et vérifier tous les liens pour vous assurer qu'ils sont https:// .

Vous pouvez utiliser l' analyse de contenu mixte , un script PHP CLI que j'ai écrit qui analyse votre site pour le contenu mixte.

Exécutez ce script à partir de la CLI, un tel:

 $ mixed-content-scan https://www.bram.us/ 

Le script lui-même commencera à numériser et à donner des commentaires lors de l'exécution. Lorsque le contenu mixte est trouvé, les URL qui provoquent des avertissements de contenu mixte s'affichent à l'écran:

 $ mixed-content-scan https://www.bram.us/ [2015-01-07 12:54:20] MCS.NOTICE: Scanning https://www.bram.us/ [] [] [2015-01-07 12:54:21] MCS.INFO: 00000 - https://www.bram.us/ [] [] [2015-01-07 12:54:22] MCS.INFO: 00001 - https://www.bram.us/projects/ [] [] [2015-01-07 12:54:22] MCS.INFO: 00002 - https://www.bram.us/projects/mint-custom-title/ [] [] [2015-01-07 12:54:23] MCS.INFO: 00003 - https://www.bram.us/projects/bramusicq/ [] [] [2015-01-07 12:54:24] MCS.INFO: 00004 - https://www.bram.us/projects/gm_bramus/ [] [] [2015-01-07 12:54:24] MCS.INFO: 00005 - https://www.bram.us/projects/js_bramus/ [] [] [2015-01-07 12:54:26] MCS.INFO: 00006 - https://www.bram.us/projects/js_bramus/jsprogressbarhandler/ [] [] [2015-01-07 12:54:27] MCS.INFO: 00007 - https://www.bram.us/projects/js_bramus/lazierload/ [] [] [2015-01-07 12:54:27] MCS.INFO: 00008 - https://www.bram.us/projects/the-box-office/ [] [] [2015-01-07 12:54:28] MCS.INFO: 00009 - https://www.bram.us/projects/tinymce-plugins/ [] [] [2015-01-07 12:54:29] MCS.INFO: 00010 - https://www.bram.us/projects/tinymce-plugins/tinymce-classes-and-ids-plugin-bramus_cssextras/ [] [] [2015-01-07 12:54:30] MCS.INFO: 00011 - https://www.bram.us/projects/flashlightboxinjector/ [] [] ... [2015-01-07 12:54:45] MCS.INFO: 00036 - https://www.bram.us/2007/06/04/accessible-expanding-and-collapsing-menu/ [] [] [2015-01-07 12:54:45] MCS.ERROR: 00037 - https://www.bram.us/demo/projects/jsprogressbarhandler/ [] [] [2015-01-07 12:54:45] MCS.WARNING: http://www.google-analytics.com/urchin.js [] [] [2015-01-07 12:54:46] MCS.INFO: 00038 - https://www.bram.us/2008/07/11/ror-progress-bar-helper/ [] [] [2015-01-07 12:54:46] MCS.INFO: 00039 - https://www.bram.us/2008/11/10/jsprogressbarhandler-033/ [] [] [2015-01-07 12:54:47] MCS.ERROR: 00040 - https://www.bram.us/demo/projects/lazierload/ [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1212/1285026452_0aeb38b6e6.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1074/1273115418_a77357040a.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1096/1273106588_91f7a736c6.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1324/1216309045_31ca82f9d9.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1262/1217169586_e4b2bfa7df.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1149/1216304291_63fd48d9c4.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1366/1216301505_51b3c590ff.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1184/1216299847_c57975bed2.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1085/1217158084_a9b059d25b.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1040/1216293529_3b7c044815.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1029/1084232736_5b8c023f46.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1318/1043062251_17071a8cc7.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://farm2.static.flickr.com/1221/1043059543_05713e6156.jpg [] [] [2015-01-07 12:54:47] MCS.WARNING: http://www.google-analytics.com/urchin.js [] [] [2015-01-07 12:54:47] MCS.INFO: 00041 - https://www.bram.us/2011/09/30/css-regions-and-css-exclusions/ [] [] [2015-01-07 12:54:47] MCS.INFO: 00042 - https://www.bram.us/2014/06/04/good-looking-shapes-gallery/ [] [] ... 

Il est également possible de transmettre un fichier contenant une liste d'URL à balayer et de modifier la sortie vers JSON. Les modèles ignorés sont également pris en charge.