2009-11-23 93 views
0

我已经编写了一些PHP脚本在局域网上的无头linux服务器上执行一些服务器端工作。例如,我有http://ipadress/php/operations.php?operation=registerUser&uName=X&uAlias=Y。现在,我想确保我的操作脚本,以便;不是LAN上的每个人都可以调用它和/或运行它,只有那些......有预共享密钥......?这是我坚持的要点,要求通过GET/POST参数预共享密钥将是最简单的,可能是最糟糕的解决方案。在PHP脚本中实现客户限制的更安全的方法是什么?PHP中的安全性

(我想在开始会话时可能需要客户端加密的密钥文件,并拒绝访问没有开始scure会话的每个人...?这只是我的思想,不知道从哪里开始要做到这一点在PHP)

编辑:我clealrly记得写在我原来的职位,所以请您“需要通过GET/POST参数预共享密钥是easisest并且可能是最糟糕的解决方案。”一次又一次地停止回答这个相同的事情。

edit2:清除事情:operations.php由同一局域网上的客户机上的程序调用。我不希望任何非客户端或陌生人机器使用operations.php,并且不希望任何人能够通过浏览器访问它。我需要某种安全/认证方法来防止这种情况发生。我不寻找登录表单或简单的HttpAuths ...另外,我不能只是简单地限制IP地址,因为;它只是不实际,有点比硬编码的非加密密码...

回答

2

如果您使用Apache与mod_ssl,它可以force clients to authenticate using certificates由特定的证书颁发机构签名。

理论上,您只能创建三个证书:您的签名证书,您的服务器证书和一个证书以分发给客户端。

虽然这通常被认为是一个坏主意。向每个客户分发单独的证书通常会更好。

+0

这是迄今为止最好的主意。为每个客户生成证书不应该是一个问题。我可以在Windows主机上的IIS7(和Linux主机上的lighttpd)上做这样的事吗? – 2009-11-24 19:01:27

+0

我对IIS7并不十分熟悉,但是这个页面可能有所帮助:http://learn.iis.net/page.aspx/478/configuring-one-to-one-client-certificate-mappings/ – Powerlord 2009-11-24 19:53:07

1

在我看来,你是在问一个关于网页认证和授权的一般问题。

当然,有许多不同的方法来实现这一点。您可以设置基于会话的认证系统,要求用户在访问页面/脚本之前输入有效的用户名/密码。这可能与用户尝试访问该页面时呈现的登录表单一样简单,除非它们已通过身份验证。然后,您可以使用PHP的内置会话管理来持续跨页面的身份验证。

或者,您可以在Web服务器级别进行身份验证,例如在Apache中通过HTTP身份验证进行身份验证。

3

最简单的方法我能想到的:

<?php 

if ($_REQUEST['key'] == '38lkjsdIEjrkd' && $_SERVER['REMOTE_ADDR'] == 192.168.1.20) { 

// load your web page 

} else { 

// show login or message about authentication 

} 

我希望帮助。

0

我通过创建.htaccess(仅允许某些地址访问脚本)和.htpasswd(定义有权访问的用户)第二个jonstjohn对HTTP身份验证的意见。 但是,如果您只需要几个脚本的快速解决方案,就是如此。

如果有更多需要有限访问的脚本,最好的解决方案是创建一个类来照顾用户日志并跟踪用户会话。

一般来说,在脚本中嵌入密码和幻数被认为是不好的编码风格。更不用说那些硬编码的“if”真的很难维护。

0

取决于您所需的安全级别。基本的Http Auth很容易设置。请参阅the manual