Apache服務(wù)器的用戶認(rèn)證 (轉(zhuǎn))
Jun 21, 2016 am 09:14 AMapache|服務(wù)器
經(jīng)常上網(wǎng)的讀者會(huì)遇到這種情況:訪問一些網(wǎng)站的某些資源時(shí),瀏覽器彈出一個(gè)對(duì)話框,要求輸入用戶名和密碼來獲取對(duì)資源的訪問。這就是用戶認(rèn)證的一種技術(shù)。用戶認(rèn)證是保護(hù)網(wǎng)絡(luò)系統(tǒng)資源的第一道防線,它控制著所有登錄并檢查訪問用戶的合法性,其目標(biāo)是僅讓合法用戶以合法的權(quán)限訪問網(wǎng)絡(luò)系統(tǒng)的資源?;镜挠脩粽J(rèn)證技術(shù)是“用戶名+密碼”。
Apache是目前流行的Web服務(wù)器,可運(yùn)行在Linux、Unix、Windows等操作系統(tǒng)下,它可以很好地解決“用戶名+密碼”的認(rèn)證問題。Apache用戶認(rèn)證所需要的用戶名和密碼有兩種不同的存貯方式:一種是文本文件;另一種是MSQL、Oracle、MySQL等數(shù)據(jù)庫。下面以Linux的Apache為例,就這兩種存貯方式,分別介紹如何實(shí)現(xiàn)用戶認(rèn)證功能,同時(shí)對(duì)Windows的Apache用戶認(rèn)證作簡(jiǎn)要的說明。
采用文本文件存儲(chǔ)
這種認(rèn)證方式的基本思想是:Apache啟動(dòng)認(rèn)證功能后,就可以在需要限制訪問的目錄下建立一個(gè)名為.htaccess的文件,指定認(rèn)證的配置命令。當(dāng)用戶第一次訪問該目錄的文件時(shí),瀏覽器會(huì)顯示一個(gè)對(duì)話框,要求輸入用戶名和密碼,進(jìn)行用戶身份的確認(rèn)。若是合法用戶,則顯示所訪問的頁面內(nèi)容,此后訪問該目錄的每個(gè)頁面,瀏覽器自動(dòng)送出用戶名和密碼,不用再輸入了,直到關(guān)閉瀏覽器為止。以下是實(shí)現(xiàn)的具體步驟:
以超級(jí)用戶root進(jìn)入Linux,假設(shè)Apache 1.3.12已經(jīng)編譯、安裝到了/usr/local/apache目錄中。缺省情況下,編譯Apache時(shí)自動(dòng)加入mod_auth模塊,利用此模塊可以實(shí)現(xiàn)“用戶名+密碼”以文本文件為存儲(chǔ)方式的認(rèn)證功能。
1.修改Apache的配置文件/usr/local/apache/conf/httpd.conf,對(duì)認(rèn)證資源所在的目錄設(shè)定配置命令。下例是對(duì)/usr/local/apache/htdocs/members目錄的配置:
?。糄irectory /usr/local/apache/htdocs /members>
Options Indexes FollowSymLinks
allowoverride authconfig
order allow,deny
allow from all
?。?Directory>
其中,allowoverride authconfig一行表示允許對(duì)/usr/local/apache/htdocs/ members目錄下的文件進(jìn)行用戶認(rèn)證。
2.在限制訪問的目錄/usr/local/apache/htdocs/members下建立一個(gè)文件.htaccess,其內(nèi)容如下:
AuthName "會(huì)員區(qū)"
AuthType basic
AuthUserFile/usr/local/apache/members.txt
require valid-user
說明:文件.htaccess中常用的配置命令有以下幾個(gè):
1) AuthName命令:指定認(rèn)證區(qū)域名稱。區(qū)域名稱是在提示要求認(rèn)證的對(duì)話框中顯示給用戶的(見附圖)。
2)AuthType命令:指定認(rèn)證類型。在HTTP1.0中,只有一種認(rèn)證類型:basic。在HTTP1.1中有幾種認(rèn)證類型,如:MD5。
3) AuthUserFile命令:指定一個(gè)包含用戶名和密碼的文本文件,每行一對(duì)。
4) AuthGroupFile命令:指定包含用戶組清單和這些組的成員清單的文本文件。組的成員之間用空格分開,如:
managers:user1 user2
5) require命令:指定哪些用戶或組才能被授權(quán)訪問。如:
require user user1 user2(只有用戶user1和user2可以訪問)
requiresgroupsmanagers (只有組managers中成員可以訪問)
require valid-user (在AuthUserFile指定的文件中任何用戶都可以訪問)
3.利用Apache附帶的程序htpasswd,生成包含用戶名和密碼的文本文件:/usr/local/apache/members.txt,每行內(nèi)容格式為“用戶名:密碼”。
#cd /usr/local/apache/bin
#htpasswd -bc ../members.txt user1 1234
#htpasswd -b ../members.txt user2 5678
文本文件members.txt含有兩個(gè)用戶:user1,口令為1234;user2,口令為5678。注意,不要將此文本文件存放在Web文檔的目錄樹中,以免被用戶下載。
欲了解htpasswd程序的幫助,請(qǐng)執(zhí)行htpasswd -h。
當(dāng)用戶數(shù)量比較少時(shí),這種方法對(duì)用戶的認(rèn)證是方便、省事的,維護(hù)工作也簡(jiǎn)單。但是在用戶數(shù)量有數(shù)萬人,甚至數(shù)十萬人時(shí),會(huì)在查找用戶上花掉一定時(shí)間,從而降低服務(wù)器的效率。這種情形,應(yīng)采用數(shù)據(jù)庫方式。
采用數(shù)據(jù)庫存儲(chǔ)
目前,Apache、PHP4、MySQL三者是Linux下構(gòu)建Web網(wǎng)站的最佳搭檔,這三個(gè)軟件都是免費(fèi)軟件。將三者結(jié)合起來,通過HTTP協(xié)議,利用PHP4和MySQL,實(shí)現(xiàn)Apache的用戶認(rèn)證功能。
只有在PHP4以Apache的模塊方式來運(yùn)行的時(shí)候才能進(jìn)行用戶認(rèn)證。為此,在編譯Apache時(shí)需要加入PHP4模塊一起編譯。假設(shè)PHP4作為Apache的模塊,編譯、安裝Apache到/usr/local/apache目錄,編譯、安裝MySQL到/usr/local/mysql目錄。然后進(jìn)行下面的步驟:
1.在MySQL中建立一個(gè)數(shù)據(jù)庫member,在其中建立一個(gè)表users,用來存放合法用戶的用戶名和密碼。
1)用vi命令在/tmp目錄建立一個(gè)SQL腳本文件auth.sql,內(nèi)容為:
drop database if exists member;
create database member;
use member;
create table users (
username char(20) not null,
password char(20) not null,
);
insertsintosusers values("user1",password("1234"));
insertsintosusers values("user2",password("5678"));
2)啟動(dòng)MySQL客戶程序mysql,執(zhí)行上述SQL腳本文件auth.sql的命令,在表users中增加兩個(gè)用戶的記錄。
#mysql -u root -pmypwd</tmp/auth.sql
2.編寫一個(gè)PHP腳本頭文件auth.inc,程序內(nèi)容為:
<?php
function authenticate() {
Header('WWW-authenticate: basic realm="會(huì)員區(qū)"');
Header('HTTP/1.0 401 Unauthorized');
echo "你必須輸入正確的用戶名和口令。 ";
exit;
}
function CheckUser(, ) {
if ( == "" || == "") return 0;
= "SELECT username,password FROM usersswheresusername='' and password=password('')";
= mysql_connect('localhost', 'root', 'mypwd');
mysql_select_db('member',);
= mysql_query(, );
=mysql_num_rows();
mysql_close();
if (>0) {
return 1; //有效登錄
} else {
return 0; //無效登錄
}
}
?>
函數(shù)Authenticate()的作用是利用函數(shù)Header('WWW-authenticate: basic realm="會(huì)員區(qū)"'),向?yàn)g覽器發(fā)送一個(gè)認(rèn)證請(qǐng)求消息,使瀏覽器彈出一個(gè)用戶名/密碼的對(duì)話框。當(dāng)用戶輸入用戶名和密碼后,包含此PHP腳本的URL將自動(dòng)地被再次調(diào)用,將用戶名、密碼、認(rèn)證類型分別存放到PHP4的三個(gè)特殊變量:、、,在PHP程序中可根據(jù)這三個(gè)變量值來判斷是否合法用戶。Header()函數(shù)中,basic表示基本認(rèn)證類型,realm的值表示認(rèn)證區(qū)域名稱。
函數(shù)Header('HTTP/1.0 401 Unauthorized')使瀏覽器用戶在連續(xù)多次輸入錯(cuò)誤的用戶名或密碼時(shí)接收到HTTP 401錯(cuò)誤。
函數(shù)CheckUser()用來判斷瀏覽器用戶發(fā)送來的用戶名、密碼是否與MySQL數(shù)據(jù)庫的相同,若相同則返回1,否則返回0。其中mysql_connect('localhost', 'root', 'mypwd')的數(shù)據(jù)庫用戶名root和密碼mypwd,應(yīng)根據(jù)自己的MySQL設(shè)置而改變。
3.在需要限制訪問的每個(gè)PHP腳本程序開頭增加下列程序段:
?。?php
require('auth.inc');
if (CheckUser(,)==0) {
authenticate();
} else {
echo "這是合法用戶要訪問的網(wǎng)頁。"; //將此行改為向合法用戶輸出的網(wǎng)頁
}
?>
把需要向合法用戶顯示的網(wǎng)頁內(nèi)容放到else子句中,取代上述程序段的一行:
echo "這是合法用戶要訪問的網(wǎng)頁。";
這樣,當(dāng)用戶訪問該P(yáng)HP腳本程序時(shí),需要輸入用戶名和密碼來確認(rèn)用戶的身份。
Windows的Apache用戶認(rèn)證
1.采用文本文件存放用戶名和密碼時(shí),其方法同前,但需要注意的是表示路徑的目錄名之間、目錄名與文件名之間一律用斜線“/”分開,而不是反斜線“”。
2.采用MySQL數(shù)據(jù)庫存放用戶名和密碼時(shí),首先按下列方法將PHP 4.0.3作為Apache的模塊來運(yùn)行,然后按上述“采用數(shù)據(jù)庫存儲(chǔ)用戶名和密碼的用戶認(rèn)證”的方法完成。
1)下載Windows版的Apache 1.3.12、PHP 4.0.3、MySQL 3.2.32,將三個(gè)軟件分別解壓、安裝到C:pache、C:PHP4、C:mysql目錄。
2) C:PHP4SAPI目錄有幾個(gè)常用Web服務(wù)器的PHP模塊文件,將其中php4apache.dll拷貝到Apache的modules子目錄(C:pachemodules)。
3)修改Apache的配置文件C:pachenfhttpd.conf,增加以下幾行:
LoadModule php4_module modules/ php4apache.dll
AddType application/x-httpd-php .php3
AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php
第一行使PHP4以Apache的模塊方式運(yùn)行,這樣才能進(jìn)行用戶認(rèn)證,后三行定義PHP腳本程序的擴(kuò)展名。
4)在autoexec.bat文件的PATH命令中增加PHP4所在路徑“C:PHP4”,重新啟動(dòng)電腦。
經(jīng)我測(cè)試,2.0版本的apache不成

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

PhpisstillRelevantinmodernerterpriseenvironments.1.modernPhp (7.xand8.x) offre des performances, des stricts, un jitcompilation, et modernsyntax, rendant la main

évitez N 1 Problèmes de requête, réduisez le nombre de requêtes de base de données en chargeant à l'avance des données associées; 2. Sélectionnez uniquement les champs requis pour éviter de charger des entités complètes pour enregistrer la mémoire et la bande passante; 3. Utilisez raisonnablement les stratégies de cache, telles que le cache secondaire de la doctrine ou les résultats de requête à haute fréquence de cache de Doctrine; 4. Optimisez le cycle de vie de l'entité et appelez régulièrement () pour libérer la mémoire pour empêcher le débordement de la mémoire; 5. Assurez-vous que l'indice de base de données existe et analysez les instructions SQL générées pour éviter les requêtes inefficaces; 6. Désactiver le suivi automatique des changements dans les scénarios où les modifications ne sont pas nécessaires et utilisez des tableaux ou des modes légers pour améliorer les performances. L'utilisation correcte de l'ORM nécessite de combiner la surveillance SQL, la mise en cache, le traitement par lots et l'optimisation appropriée pour garantir les performances de l'application tout en maintenant l'efficacité du développement.

Pour construire un microservice PHP flexible, vous devez utiliser RabbitMQ pour obtenir une communication asynchrone, 1. Découplez le service via des files d'attente de messages pour éviter les défaillances en cascade; 2. Configurer des files d'attente persistantes, des messages persistants, une confirmation de libération et un ACK manuel pour assurer la fiabilité; 3. Utilisez des échecs de traitement de la sécurité de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente de la file d'attente; 4. Utilisez des outils tels que SuperVisord pour protéger les processus de consommation et permettre des mécanismes de battements cardiaques pour assurer la santé des services; et finalement réaliser la capacité du système à opérer en continu en échecs.

L'utilisation de l'image de base PHP correcte et la configuration d'un environnement Docker sécurisé et optimisé sont la clé pour obtenir la production prête. 1. Sélectionnez PHP: 8.3-FPM-Alpine comme image de base pour réduire la surface d'attaque et améliorer les performances; 2. Désactiver les fonctions dangereuses via PHP.ini personnalisé, désactiver l'affichage des erreurs et activer Opcache et Jit pour améliorer la sécurité et les performances; 3. Utilisez Nginx comme proxy inverse pour restreindre l'accès aux fichiers sensibles et transférer correctement les demandes PHP à PHP-FPM; 4. Utilisez des images d'optimisation en plusieurs étapes pour supprimer les dépendances de développement et configurez les utilisateurs non racinaires pour exécuter des conteneurs; 5. Supervisord facultatif pour gérer plusieurs processus tels que Cron; 6. Vérifiez qu'aucune fuite d'informations sensibles avant le déploiement

Le mécanisme de collecte des ordures de PHP est basé sur le comptage de référence, mais les références circulaires doivent être traitées par un collecteur de déchets circulaires périodique; 1. Le nombre de références libère la mémoire immédiatement lorsqu'il n'y a pas de référence à la variable; 2. Référence La référence fait que la mémoire ne peut pas être automatiquement libérée, et cela dépend de GC pour le détecter et le nettoyer; 3. GC est déclenché lorsque la "racine possible" Zval atteint le seuil ou appelle manuellement gc_collect_cycles (); 4. Les applications PHP à long terme devraient surveiller GC_Status () et appeler GC_COLLECT_CYCLES () à temps pour éviter la fuite de mémoire; 5. Les meilleures pratiques incluent d'éviter les références circulaires, en utilisant gc_disable () pour optimiser les zones clés de performance et les objets de déréférence via la méthode Clear () d'Orm.

ReadonlypropertiesInphp8.2CanlybeassignedonceinthestrustructoratDeclarationandcannotBemodifiedAfterward, applicationmutabilityaThelanguageLevel.2.Toachievedeep-immutability, webutableTypeSlikEarrayinArrayobjectorUSustomymutability, webutilletypeslikearraysinarrayobjectoruseseCustomMutabeColEctionSucha.

BREF permet aux développeurs PHP de créer des applications évolutives et rentables sans gérer les serveurs. 1.BREF apporte PHP à Awslambda en fournissant une couche d'exécution PHP optimisée, prend en charge PHP8.3 et d'autres versions, et s'intègre de manière transparente à des frameworks tels que Laravel et Symfony; 2. Les étapes de déploiement incluent: l'installation de BREF à l'aide de composer, configurer Serverless.yml pour définir des fonctions et des événements, tels que les points de terminaison HTTP et les commandes artisanales; 3. Exécutez la commande ServerlessDeploy pour terminer le déploiement, configurez automatiquement Apigeway et générez des URL d'accès; 4. Pour les restrictions de lambda, BREF fournit des solutions.

Il est recommandé d'utiliser le mot-clé dans pour vérifier si une clé existe dans le dictionnaire, car elle est concise, efficace et très lisible; 2. Il n'est pas recommandé d'utiliser la méthode get () pour déterminer si la clé existe, car elle sera mal jugée lorsque la clé existe mais que la valeur n'est aucune; 3. Vous pouvez utiliser la méthode Keys (), mais elle est redondante, car par défaut pour vérifier la clé; 4. Lorsque vous devez obtenir une valeur et que la clé attendue existe généralement, vous pouvez utiliser Try-Except pour attraper l'exception de Keyerror. La méthode la plus recommandée consiste à utiliser le mot clé dans, qui est à la fois s?r et efficace, et n'est pas affecté par la valeur de aucun, ce qui convient à la plupart des scénarios.
