我已经在我的embedded式设备上设置了lighttpd,并在lighttpd.conf
configuration了这些模块当从Chrome或Firefox中通过PC访问网页时,我要求input用户名和密码,并在提供页面后加载。
当我在iPad或iPhone浏览器上做同样的事情时,我也会得到validation对话框,但是由于某种原因,它会反复popup。
使用mod_accesslog
模块,我能够看到,iPad仍然发出请求,而不会使用HTTP 401
对某些请求产生的authentication:
192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ... 192.168.2.33 192.168.2.247 wwwX [10/Apr/2011:16:01:30 +0200] "GET /[...] HTTP/1.1" 304 0 "http://192.168.2.247/" ... 192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:33 +0200] "GET /[...] HTTP/1.1" 401 351 "http://192.168.2.247/" ... 192.168.2.33 192.168.2.247 - [10/Apr/2011:16:01:56 +0200] "GET / HTTP/1.1" 401 351 "-" ...
我也尝试添加mod_access
模块,但没有改变任何东西。
问题在于浏览器或lighttpd
networking服务器或其模块/configuration? 如何解决?
我的lighttpd.conf
文件的相关部分如下所示:
# mod_auth must be loaded before mod_fastcgi server.modules = ( "mod_auth", "mod_cgi", "mod_fastcgi" )
具有mod_authconfiguration的部分如下所示:
auth.debug = 0 auth.backend = "plain" auth.backend.plain.userfile = "/tmp/lighttpd-plain.user" auth.require = ( "/" => ( "method" => "digest", "realm" => "myRealm", "require" => "valid-user" ) )
编辑:
我忘了提到的一件事是,网页使用jQuery发出AJAX请求。 请求不会设置username
和password
variables。 在所有的浏览器上,当用户通过浏览器popup对话框authentication自己后,这种方式没有问题。
我认为在Safari浏览器的AJAX请求可能是那些不使用任何凭据,从而得到401等等。有没有办法让它使用用户在对话框中提供的凭据?
auth.require = ( "/" => ( "method" => "digest", "realm" => "myRealm", "require" => "valid-user" ) )
那是因为你使用的摘要authentication在某些浏览器上是不被支持/错误的。 你应该使用基本的方法(这是不安全的),或者使用cookie来实现你自己的authentication。 如果您对安全有效的身份validation解决scheme感兴趣(内置保护措施,则可以通过暴力攻击和帐户共享),请访问我们的网站: finesec.com