Je n'ai qu'une seule page à laquelle je veux forcer l'accès en tant que page HTTPS (PHP sur Apache). Comment faire cela sans que tout le répertoire nécessite HTTPS? Ou, si vous soumettez un formulaire à une page HTTPS à partir d'une page HTTP, l'envoie-t-il par HTTPS au lieu de HTTP?
Voici mon exemple:
http://www.example.com/some-page.php
Je souhaite qu'il soit uniquement accessible via:
https://www.example.com/some-page.php
Bien sûr, je peux mettre tous les liens vers cette page pointés vers la version HTTPS, mais cela n'empêche pas un imbécile d'y accéder volontairement via HTTP ...
Une chose que je pensais était de mettre une redirection dans l'en-tête du fichier PHP pour vérifier qu'ils accèdent à la version HTTPS:
if($_SERVER["SCRIPT_URI"] == "http://www.example.com/some-page.php"){
header('Location: https://www.example.com/some-page.php');
}
Mais cela ne peut pas être la bonne façon, n'est-ce pas?
Réponses:
La façon dont je l'ai fait avant est fondamentalement comme ce que vous avez écrit, mais n'a pas de valeurs codées en dur:
la source
(empty($_SERVER["HTTPS"]) || $_SERVER["HTTPS"] !== "on")
pour corriger les notifications PHP.$_SERVER[]
variables ne sont-elles pas modifiables / vulnérables à l'intervention des utilisateurs?HTTP_X_FORWARDED
, et peuvent être manipulés, mais d'autres aimentHTTPS
ouSERVER_PORT
sont définis directement à partir du serveur Web et devraient généralement être sûrs.Vous pouvez le faire avec une directive et mod_rewrite sur Apache:
Vous pouvez rendre la localisation plus intelligente au fil du temps en utilisant des expressions régulières si vous le souhaitez.
la source
Vous devez forcer le client à toujours demander HTTPS avec les en- têtes HTTP Strict Transport Security (HSTS):
Veuillez noter que HSTS est pris en charge dans la plupart des navigateurs modernes, mais pas universel. Ainsi, la logique ci-dessus redirige manuellement l'utilisateur indépendamment de la prise en charge s'il se retrouve sur HTTP, puis définit l'en-tête HSTS de sorte que les demandes des clients supplémentaires doivent être redirigées par le navigateur si possible.
la source
Je viens de créer un fichier .htaccess et j'ai ajouté:
Facile !
la source
la source
J'ai dû faire quelque chose comme ça lors de l'exécution derrière un équilibreur de charge. Pointe du chapeau https://stackoverflow.com/a/16076965/766172
la source
La manière PHP:
La manière Apache mod_rewrite:
la source
http://www.besthostratings.com/articles/force-ssl-htaccess.html
Parfois, vous devrez peut-être vous assurer que l'utilisateur navigue sur votre site via une connexion sécurisée. Un moyen simple de toujours rediriger l'utilisateur vers une connexion sécurisée (https: //) peut être réalisé avec un fichier .htaccess contenant les lignes suivantes:
Veuillez noter que le .htaccess doit être situé dans le dossier principal du site Web.
Si vous souhaitez forcer HTTPS pour un dossier particulier, vous pouvez utiliser:
Le fichier .htaccess doit être placé dans le dossier où vous devez forcer HTTPS.
la source
Ok .. Maintenant, il y a des tonnes de trucs à ce sujet maintenant mais personne ne répond vraiment à la question "Sécurisé". Pour moi, il est ridicule d'utiliser quelque chose qui n'est pas sûr.
À moins que vous ne l'utilisiez comme appât.
La propagation de $ _SERVER peut être modifiée à la volonté de quelqu'un qui sait comment.
De plus, comme Sazzad Tushar Khan et thebigjc l'ont déclaré, vous pouvez également utiliser httaccess pour le faire et il y a beaucoup de réponses ici qui le contiennent.
Il suffit d'ajouter:
à la fin de ce que vous avez dans votre .httaccess et c'est tout.
Nous ne sommes toujours pas aussi sûrs que possible avec ces 2 outils.
Le reste est simple. S'il manque des attributs, c'est-à-dire ...
Disons également que vous avez mis à jour votre fichier httaccess et que vous vérifiez:
Il y a beaucoup plus de variables que vous pouvez vérifier, par exemple ..
HOST_URI
(S'il y a des atributs statiques à vérifier)HTTP_USER_AGENT
(Même session différentes valeurs)Donc, tout ce que je dis, c'est de ne pas se contenter de l'un ou de l'autre lorsque la réponse réside dans une combinaison.
Pour plus d'informations sur la réécriture des accès https, consultez la documentation-> http://httpd.apache.org/docs/2.0/misc/rewriteguide.html
Quelques piles ici -> Forcer SSL / https à l'aide de .htaccess et mod_rewrite
et
obtenir l'URL complète du page courante (PHP)
pour en nommer un couple.
la source
ERR_TOO_MANY_REDIRECTS
. Comment puis-je réparer ça?Utilisez
$_SERVER['HTTPS']
pour dire si c'est SSL , et redirigez vers le bon endroit sinon.Et rappelez-vous, la page qui affiche le formulaire n'a pas besoin d'être alimentée via HTTPS, c'est l'URL de retour qui en a le plus besoin.
Edit : oui, comme indiqué ci-dessous, il est préférable d'avoir l'ensemble du processus en HTTPS. C'est beaucoup plus rassurant - je faisais remarquer que le message est la partie la plus critique. De plus, vous devez veiller à ce que tous les cookies soient définis pour être sécurisés, de sorte qu'ils ne seront envoyés que via SSL. La solution mod_rewrite est également très astucieuse, je l'ai utilisée pour sécuriser de nombreuses applications sur mon propre site Web.
la source
utiliser
htaccess
:la source
Ne mélangez pas HTTP et HTTPS sur la même page. Si vous avez une page de formulaire qui est servie via HTTP, je vais être nerveux à propos de la soumission de données - je ne peux pas voir si la soumission passe par HTTPS ou HTTP sans faire une vue de la source et la rechercher.
Servir le formulaire sur HTTPS avec le lien de soumission n'est pas un changement si lourd pour l'avantage.
la source
Si vous utilisez Apache ou quelque chose comme LiteSpeed, qui prend en charge les fichiers .htaccess, vous pouvez effectuer les opérations suivantes. Si vous ne disposez pas déjà d'un fichier .htaccess, vous devez créer un nouveau fichier .htaccess dans votre répertoire racine (généralement où se trouve votre index.php). Ajoutez maintenant ces lignes comme premières règles de réécriture dans votre .htaccess:
Vous n'avez besoin de l'instruction "RewriteEngine On" qu'une seule fois dans votre .htaccess pour toutes les règles de réécriture, donc si vous l'avez déjà, copiez simplement la deuxième et la troisième ligne.
J'espère que ça aide.
la source
Utiliser ceci n'est PAS suffisant:
Si vous avez du contenu http (comme une source d'image http externe), le navigateur détectera une menace possible. Assurez-vous donc que tous vos ref et src dans votre code sont https
la source
J'ai traversé de nombreuses solutions pour vérifier le statut de $ _SERVER [HTTPS] mais il semble que ce n'est pas fiable car parfois il ne se met pas sur on, off, etc. provoquant la redirection de boucle interne du script.
Voici la solution la plus fiable si votre serveur prend en charge $ _SERVER [SCRIPT_URI]
Veuillez noter que selon votre installation, votre serveur peut ne pas prendre en charge $ _SERVER [SCRIPT_URI] mais si c'est le cas, c'est le meilleur script à utiliser.
Vous pouvez vérifier ici: Pourquoi certaines installations PHP ont $ _SERVER ['SCRIPT_URI'] et d'autres pas
la source
Pour ceux qui utilisent IIS, l'ajout de cette ligne dans le web.config aidera:
Un fichier d'exemple complet
la source
Vous ne devriez pas pour des raisons de sécurité. Surtout si les cookies sont en jeu ici. Cela vous laisse grand ouvert aux attaques de relecture basées sur les cookies.
Dans tous les cas, vous devez utiliser les règles de contrôle Apache pour le régler.
Ensuite, vous pouvez tester l'activation de HTTPS et rediriger si nécessaire si nécessaire.
Vous devez rediriger vers la page de paiement uniquement en utilisant un FORM POST (pas de get), et les accès à la page sans POST doivent être redirigés vers les autres pages. (Cela attrapera les gens qui sautent à chaud.)
http://joseph.randomnetworks.com/archives/2004/07/22/redirect-to-ssl-using-apaches-htaccess/
Est-ce un bon point de départ, excuses pour ne pas en fournir plus. Mais tu devrais vraiment tout pousser via SSL.
C'est trop protecteur, mais au moins vous avez moins de soucis.
la source
peut-être que celui-ci peut vous aider, c'est comme ça que j'ai fait pour mon site, ça marche comme un charme:
la source
Si vous souhaitez utiliser PHP pour ce faire, cette méthode a très bien fonctionné pour moi:
Il vérifie la variable HTTPS dans le tableau superglobal $ _SERVER pour voir si elle est égale à «on». Si la variable n'est pas égale à on.
la source
J'ai utilisé ce script et il fonctionne bien sur le site.
la source
C'est simple.
la source