DooDigestAuth php(后台)授权管理类 web浏览器授权
<span> 1</span> <span>php </span><span> 2</span><span>/*</span><span>* </span><span> 3</span><span> * DooDigestAuth class file. </span><span> 4</span><span> * </span><span> 5</span><span> * @author Leng Sheng Hong <darkredz> </darkredz></span><span> 6</span><span> * @link http://www.doophp.com/ </span><span> 7</span><span> * @copyright Copyright © 2009 Leng Sheng Hong </span><span> 8</span><span> * @license http://www.doophp.com/license </span><span> 9</span><span>*/</span><span> 10</span><span> 11</span><span>/*</span><span>* </span><span> 12</span><span> * Handles HTTP digest authentication </span><span> 13</span><span> * </span><span> 14</span><span> * <p>HTTP digest authentication can be used with the URI router. </p></span><span> 15</span><span> * HTTP digest is much more recommended over the use of HTTP Basic auth which doesn't provide any encryption. </span><span> 16</span><span> * If you are running PHP on Apache in CGI/FastCGI mode, you would need to </span><span> 17</span><span> * add the following line to your .htaccess for digest auth to work correctly. </span><span> 18</span><span> * <code>RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]</code> </span><span> 19</span><span> * </span><span> 20</span><span> * <p>This class is tested under Apache 2.2 and Cherokee web server. It should work in both mod_php and cgi mode.</p> </span><span> 21</span><span> * </span><span> 22</span><span> * @author Leng Sheng Hong <darkredz> </darkredz></span><span> 23</span><span> * @version $Id: DooDigestAuth.php 1000 2009-07-7 18:27:22 </span><span> 24</span><span> * @package doo.auth </span><span> 25</span><span> * @since 1.0 </span><span> 26</span><span>*/</span><span> 27</span><span>class</span><span> DooDigestAuth{ </span><span> 28</span><span> 29</span><span>/*</span><span>* </span><span> 30</span><span> * Authenticate against a list of username and passwords. </span><span> 31</span><span> * </span><span> 32</span><span> * <p>HTTP Digest Authentication doesn't work with PHP in CGI mode, </p></span><span> 33</span><span> * you have to add this into your .htaccess <code>RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]</code> </span><span> 34</span><span> * </span><span> 35</span><span> * @param string $realm Name of the authentication session </span><span> 36</span><span> * @param array $users An assoc array of username and password: array('uname1'=>'pwd1', 'uname2'=>'pwd2') </span><span> 37</span><span> * @param string $fail_msg Message to be displayed if the User cancel the login </span><span> 38</span><span> * @param string $fail_url URL to be redirect if the User cancel the login </span><span> 39</span><span> * @return string The username if login success. </span><span> 40</span><span>*/</span><span> 41</span><span>public</span><span>static</span><span>function</span> http_auth(<span>$realm</span>, <span>$users</span>, <span>$fail_msg</span>=<span>NULL</span>, <span>$fail_url</span>=<span>NULL</span><span>){ </span><span> 42</span><span>$realm</span> = "Restricted area - <span>$realm</span>"<span>; </span><span> 43</span><span> 44</span><span>//</span><span>user => password </span><span> 45</span><span> //$users = array('admin' => '1234', 'guest' => 'guest');</span><span> 46</span><span>if</span>(!<span>empty</span>(<span>$_SERVER</span>['REDIRECT_HTTP_AUTHORIZATION']) && <span>strpos</span>(<span>$_SERVER</span>['REDIRECT_HTTP_AUTHORIZATION'], 'Digest')===0<span>){ </span><span> 47</span><span>$_SERVER</span>['PHP_AUTH_DIGEST'] = <span>$_SERVER</span>['REDIRECT_HTTP_AUTHORIZATION'<span>]; </span><span> 48</span><span> } </span><span> 49</span><span> 50</span><span>if</span> (<span>empty</span>(<span>$_SERVER</span>['PHP_AUTH_DIGEST'<span>])) { </span><span> 51</span><span>header</span>('WWW-Authenticate: Digest realm="'.<span>$realm</span>. <span> 52</span> '",qop="auth",n>uniqid().'",opaque="'.<span>md5</span>(<span>$realm</span>).'"'<span>); </span><span> 53</span><span>header</span>('HTTP/1.1 401 Unauthorized'<span>); </span><span> 54</span><span>if</span>(<span>$fail_msg</span>!=<span>NULL</span><span>) </span><span> 55</span><span>die</span>(<span>$fail_msg</span><span>); </span><span> 56</span><span>if</span>(<span>$fail_url</span>!=<span>NULL</span><span>) </span><span> 57</span><span>die</span>("<script>window.location.href = '<span>$fail_url'</script>"<span>); </span><span> 58</span><span>exit</span><span>; </span><span> 59</span><span> } </span><span> 60</span><span> 61</span><span>//</span><span> analyze the PHP_AUTH_DIGEST variable</span><span> 62</span><span>if</span> (!(<span>$data</span> = self::http_digest_parse(<span>$_SERVER</span>['PHP_AUTH_DIGEST'])) || !<span>isset</span>(<span>$users</span>[<span>$data</span>['username'<span>]])){ </span><span> 63</span><span>header</span>('WWW-Authenticate: Digest realm="'.<span>$realm</span>. <span> 64</span> '",qop="auth",n>uniqid().'",opaque="'.<span>md5</span>(<span>$realm</span>).'"'<span>); </span><span> 65</span><span>header</span>('HTTP/1.1 401 Unauthorized'<span>); </span><span> 66</span><span>if</span>(<span>$fail_msg</span>!=<span>NULL</span><span>) </span><span> 67</span><span>die</span>(<span>$fail_msg</span><span>); </span><span> 68</span><span>if</span>(<span>$fail_url</span>!=<span>NULL</span><span>) </span><span> 69</span><span>die</span>("<script>window.location.href = '<span>$fail_url'</script>"<span>); </span><span> 70</span><span>exit</span><span>; </span><span> 71</span><span> } </span><span> 72</span><span> 73</span><span>//</span><span> generate the valid response</span><span> 74</span><span>$A1</span> = <span>md5</span>(<span>$data</span>['username'] . ':' . <span>$realm</span> . ':' . <span>$users</span>[<span>$data</span>['username'<span>]]); </span><span> 75</span><span>$A2</span> = <span>md5</span>(<span>$_SERVER</span>['REQUEST_METHOD'].':'.<span>$data</span>['uri'<span>]); </span><span> 76</span><span>$valid_response</span> = <span>md5</span>(<span>$A1</span>.':'.<span>$data</span>['nonce'].':'.<span>$data</span>['nc'].':'.<span>$data</span>['cnonce'].':'.<span>$data</span>['qop'].':'.<span>$A2</span><span>); </span><span> 77</span><span> 78</span><span>if</span> (<span>$data</span>['response'] != <span>$valid_response</span><span>){ </span><span> 79</span><span>header</span>('HTTP/1.1 401 Unauthorized'<span>); </span><span> 80</span><span>header</span>('WWW-Authenticate: Digest realm="'.<span>$realm</span>. <span> 81</span> '",qop="auth",n>uniqid().'",opaque="'.<span>md5</span>(<span>$realm</span>).'"'<span>); </span><span> 82</span><span>if</span>(<span>$fail_msg</span>!=<span>NULL</span><span>) </span><span> 83</span><span>die</span>(<span>$fail_msg</span><span>); </span><span> 84</span><span>if</span>(<span>$fail_url</span>!=<span>NULL</span><span>) </span><span> 85</span><span>die</span>("<script>window.location.href = '<span>$fail_url'</script>"<span>); </span><span> 86</span><span>exit</span><span>; </span><span> 87</span><span> } </span><span> 88</span><span> 89</span><span>//</span><span> ok, valid username & password</span><span> 90</span><span>return</span><span>$data</span>['username'<span>]; </span><span> 91</span><span> } </span><span> 92</span><span> 93</span><span>/*</span><span>* </span><span> 94</span><span> * Method to parse the http auth header, works with IE. </span><span> 95</span><span> * </span><span> 96</span><span> * Internet Explorer returns a qop="xxxxxxxxxxx" in the header instead of qop=xxxxxxxxxxx as most browsers do. </span><span> 97</span><span> * </span><span> 98</span><span> * @param string $txt header string to parse </span><span> 99</span><span> * @return array An assoc array of the digest auth session </span><span>100</span><span>*/</span><span>101</span><span>private</span><span>static</span><span>function</span> http_digest_parse(<span>$txt</span><span>) </span><span>102</span><span> { </span><span>103</span><span>$res</span> = <span>preg_match</span>("/username=\"([^\"]+)\"/i", <span>$txt</span>, <span>$match</span><span>); </span><span>104</span><span>$data</span>['username'] = (<span>isset</span>(<span>$match</span>[1]))?<span>$match</span>[1]:<span>null</span><span>; </span><span>105</span><span>$res</span> = <span>preg_match</span>('/n/i', <span>$txt</span>, <span>$match</span><span>); </span><span>106</span><span>$data</span>['nonce'] = <span>$match</span>[1<span>]; </span><span>107</span><span>$res</span> = <span>preg_match</span>('/nc=([0-9]+)/i', <span>$txt</span>, <span>$match</span><span>); </span><span>108</span><span>$data</span>['nc'] = <span>$match</span>[1<span>]; </span><span>109</span><span>$res</span> = <span>preg_match</span>('/cn/i', <span>$txt</span>, <span>$match</span><span>); </span><span>110</span><span>$data</span>['cnonce'] = <span>$match</span>[1<span>]; </span><span>111</span><span>$res</span> = <span>preg_match</span>('/qop=([^,]+)/i', <span>$txt</span>, <span>$match</span><span>); </span><span>112</span><span>$data</span>['qop'] = <span>str_replace</span>('"','',<span>$match</span>[1<span>]); </span><span>113</span><span>$res</span> = <span>preg_match</span>('/uri=\"([^\"]+)\"/i', <span>$txt</span>, <span>$match</span><span>); </span><span>114</span><span>$data</span>['uri'] = <span>$match</span>[1<span>]; </span><span>115</span><span>$res</span> = <span>preg_match</span>('/resp/i', <span>$txt</span>, <span>$match</span><span>); </span><span>116</span><span>$data</span>['response'] = <span>$match</span>[1<span>]; </span><span>117</span><span>return</span><span>$data</span><span>; </span><span>118</span><span> } </span><span>119</span><span>120</span><span>121</span> }
调用方法:
<span>1</span><span>require_once</span>(<span>dirname</span>(<span>__FILE__</span>)."/DooDigestAuth.php"<span>); </span><span>2</span> DooDigestAuth::http_auth('example.com', <span>array</span>('admin'=>"123456789"));
phpweb授权登录可有效防止后台暴力破解
下载地址:http://files.cnblogs.com/files/func/DooDigestAuth.zip
以上就介绍了DooDigestAuth php(后台)授权管理类 web浏览器授权,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Kod status HTTP 520 bermakna pelayan mengalami ralat yang tidak diketahui semasa memproses permintaan dan tidak dapat memberikan maklumat yang lebih khusus. Digunakan untuk menunjukkan bahawa ralat tidak diketahui berlaku semasa pelayan memproses permintaan, yang mungkin disebabkan oleh masalah konfigurasi pelayan, masalah rangkaian atau sebab lain yang tidak diketahui. Ini biasanya disebabkan oleh isu konfigurasi pelayan, isu rangkaian, kelebihan beban pelayan atau ralat pengekodan. Jika anda menghadapi ralat kod status 520, sebaiknya hubungi pentadbir tapak web atau pasukan sokongan teknikal untuk mendapatkan maklumat dan bantuan lanjut.

Kod status HTTP 403 bermakna pelayan menolak permintaan pelanggan. Penyelesaian kepada kod status http 403 ialah: 1. Semak kelayakan pengesahan Jika pelayan memerlukan pengesahan, pastikan kelayakan yang betul disediakan 2. Semak sekatan alamat IP, pastikan bahawa alamat IP klien adalah disenarai putih atau tidak disenaraihitamkan 3. Semak tetapan kebenaran fail Jika kod status 403 berkaitan dengan tetapan kebenaran fail atau direktori, pastikan klien mempunyai kebenaran yang mencukupi untuk mengakses fail atau direktori ini. dll.

Kuasai maksud kod status HTTP 301: Senario aplikasi biasa pengalihan halaman web Dengan perkembangan pesat Internet, keperluan orang ramai untuk interaksi halaman web menjadi lebih tinggi dan lebih tinggi. Dalam bidang reka bentuk web, pengalihan halaman web adalah teknologi biasa dan penting, dilaksanakan melalui kod status HTTP 301. Artikel ini akan meneroka maksud kod status HTTP 301 dan senario aplikasi biasa dalam pengalihan halaman web. Kod status HTTP301 merujuk kepada ubah hala kekal (PermanentRedirect). Apabila pelayan menerima pelanggan

Cara menggunakan NginxProxyManager untuk melaksanakan lompatan automatik dari HTTP ke HTTPS Dengan perkembangan Internet, semakin banyak laman web mula menggunakan protokol HTTPS untuk menyulitkan penghantaran data untuk meningkatkan keselamatan data dan perlindungan privasi pengguna. Memandangkan protokol HTTPS memerlukan sokongan sijil SSL, sokongan teknikal tertentu diperlukan semasa menggunakan protokol HTTPS. Nginx ialah pelayan HTTP yang berkuasa dan biasa digunakan dan pelayan proksi terbalik, dan NginxProxy

Gunakan fungsi http.PostForm untuk menghantar permintaan POST dengan data borang Dalam pakej http bahasa Go, anda boleh menggunakan fungsi http.PostForm untuk menghantar permintaan POST dengan data borang. Prototaip fungsi http.PostForm adalah seperti berikut: funcPostForm(urlstring,dataurl.Values)(resp*http.Response,errerror)di mana, u

Aplikasi Pantas: Analisis Kes Pembangunan Praktikal PHP Asynchronous HTTP Muat Turun Berbilang Fail Dengan pembangunan Internet, fungsi muat turun fail telah menjadi salah satu keperluan asas bagi banyak laman web dan aplikasi. Untuk senario di mana berbilang fail perlu dimuat turun pada masa yang sama, kaedah muat turun segerak tradisional selalunya tidak cekap dan memakan masa. Atas sebab ini, menggunakan PHP untuk memuat turun berbilang fail secara tidak segerak melalui HTTP telah menjadi penyelesaian yang semakin biasa. Artikel ini akan menganalisis secara terperinci cara menggunakan HTTP tak segerak PHP melalui kes pembangunan sebenar.

Masalah dan penyelesaian komunikasi rangkaian dan keselamatan biasa dalam C# Dalam era Internet hari ini, komunikasi rangkaian telah menjadi bahagian yang sangat diperlukan dalam pembangunan perisian. Dalam C#, kami biasanya menghadapi beberapa masalah komunikasi rangkaian, seperti keselamatan penghantaran data, kestabilan sambungan rangkaian, dsb. Artikel ini akan membincangkan secara terperinci komunikasi rangkaian biasa dan isu keselamatan dalam C# dan menyediakan penyelesaian yang sepadan serta contoh kod. 1. Masalah komunikasi rangkaian Gangguan sambungan rangkaian: Semasa proses komunikasi rangkaian, sambungan rangkaian mungkin terganggu, yang boleh menyebabkan

Penyelesaian: 1. Semak Content-Type dalam tajuk permintaan 2. Semak format data dalam badan permintaan 3. Gunakan format pengekodan yang sesuai 5. Semak sokongan sisi pelayan;
