3

J'ai un répertoire de mon site Web que j'aimerais sécuriser. Je fais cela en utilisant un fichier .htaccess pour forcer un HTTP AUTH. Je voudrais forcer ce HTTP AUTH à être fait sur HTTPS.Force HTTP AUTH sur HTTPS

Vous cherchez à différentes solutions de débordement de la pile est ici le point que j'ai à:

je le fichier .htaccess suivant dans le répertoire « top_secret »:

SSLRequireSSL 
ErrorDocument 403 /rd.php 
AuthType Basic 
AuthName "Secure Page" 
AuthUserFile "/home/usr/.htpasswds/public_html/top_secret/passwd" 
Require valid-user 

Je puis « e .php » dans mon répertoire racine:

<?php 
$path = "https://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; 
if ($_SERVER['SERVER_PORT'] == 80) { 
    header("Status: 302 Moved\n"); 
    header("Location: ".$path."\n\n"); 
} 
else { 
    header("Content-type: text/html\n\n"); 
    echo '?'; 
} 
?> 

Cela fonctionne très bien sur mon ordinateur de bureau, mais quand je navigue dans le répertoire top_secret de mon iPhone dans Safari (le HTTPS ou Adresse HTTP) Je viens d'obtenir un point d'interrogation retourné. Donc, pour une raison quelconque, l'autre condition de mon fichier php est en cours de sortie.

Je ne sais pas exactement ce que cela signifie et comment résoudre, toute aide serait grandement appréciée

+0

J'ai déjà répondu à votre question. Si vous n'êtes pas satisfait de ma réponse, pourriez-vous me dire pourquoi et je vais le mettre à jour ou répondre à vos préoccupations? Merci. – SuperDuperApps

+0

Allez-vous simplement perdre votre prime? Je propose de mettre à jour ma réponse pour vous, mais je ne peux pas le faire sans un retour de votre part. – SuperDuperApps

+0

Supposons que le navigateur safari reçoive 403 de la directive 'Require' via HTTPS en raison d'un comportement incorrect avec' AuthType Basic'. – Deadooshka

Répondre

3

Plutôt que de le faire en PHP, je vous suggère de le mettre en œuvre sur la couche serveur web. Ajouter ceci au début de votre fichier .htaccess:

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

Et retirer votre code de redirection PHP.

Toutefois, cela nécessite toujours une connexion avant l'émission de la redirection, les détails étant transférés de manière non sécurisée. Ce dont vous avez vraiment besoin, c'est de deux blocs <VirtualHost> dans Apache. Un pour le port 80 qui redirige les demandes pour votre répertoire vers HTTPS, et un pour le port 443 qui a l'HTTP AUTH configuré.

Mise à jour

il fait également aucun sens pour essayer de délivrer une redirection 302 dans un document qui est utilisé comme document d'erreur 403, étant donné que le code d'état a déjà été défini et le document est uniquement utilisé pour générer le corps de cette réponse, il ne peut pas maintenant changer le code de réponse à 302 parce qu'il a déjà été mis à 403. L'approche que j'ai décrite ci-dessus fonctionnera, ou vous pourriez simplement refuser des requêtes HTTP et servir uniquement HTTPS pour ce répertoire.

+0

Salut SuperDuperApps, beaucoup s'excuse pour ma réponse tardive et je vous remercie de votre aide sur cette question. C'est une bonne option, mais comme vous le dites, il faut 2x authentifications avec une envoyée en clair (que je voudrais éviter). En outre, quand je cours cela, je reçois une erreur de code 500 du serveur. Y a-t-il une chance que vous puissiez me diriger vers d'autres documentations détaillant comment j'installerais des virtualhosts comme vous le décrivez? – user2351418

+0

Pour l'erreur 500 interne du serveur, vérifiez vos journaux d'erreurs pour voir quel est le problème. Pour la configuration des hôtes virtuels dans Apache, il existe [documentation ici] (https://httpd.apache.org/docs/2.4/vhosts/). Cela dépend de votre configuration comment vous devez le faire.Si vous avez des problèmes, vous pouvez ouvrir une nouvelle question et poster une partie de votre configuration. – SuperDuperApps

1

Si vous êtes derrière beanstalk ou n'importe quel équilibreur de charge, vous pouvez définir une redirection à ce niveau. Sinon, écrivez la configuration .htaccess suggérée par @ SuperDuperApps. Cela devrait être un commentaire mais je n'ai pas assez de représentant ;-)

+0

vous devriez probablement juste écrire cela comme un commentaire ci-dessous le poste auquel vous faites référence. –

+0

J'essayais juste d'aider, je n'ai pas la réputation de commenter, pourquoi votez-vous? Je n'ai rien dit de mal? J'ai perdu le temps de te répondre? Toi? – MehulJoshi

+0

ah, n'a pas vu que vous n'avez pas assez de réputation pour commenter - bon point et si vous éditez votre poste je vais supprimer la downvote :) –