snoopyxp 发表于 2004-1-10 05:09:35

遇到一超难问题,用php怎么获取远程调用者ip,内详,高手进

写了一个php程序,对外提供的接口是在客户网站网页中嵌入一个表单域,表单提交的数据由运行我的程序的服务器处理并返回给客户,但是怎么才能实现对客户网站身份的认证呢?这个身份必须是唯一的并且客户不可改动,其他网站也不可以伪装的,想破脑袋也没有想到好的解决方案,还请高人点化。

jiangtao9999 发表于 2004-1-10 08:47:14

比较困难……………… :?
没记得那个变量有调用网站的地址……………

__FILE__里如果被引用是引用文件的名字。
$PHP_SELF 好像也一样,但没说跨服务器会怎么样…………

你看看 $_SERVER[] 的服务器 IP 是哪个机器的??

Fujinsan 发表于 2004-1-10 11:36:00

容易啊。可以从request的环境变量中取,phpbb中记录发帖者IP的功能就是这个样子的吧。另外http请求包中还有个reffer的字段,在request参数中也有,代表调用这个地址的网页的地址,你可以限制这个地址只能是你的服务器上的地址。

snoopyxp 发表于 2004-1-10 16:34:32

php中记录浏览者ip很容易,但我要的是调用我程序的网站的程序,实际上我的程序还是在我的服务器上执行啊。
靠reffer字段来鉴别是一种方案,也是我目前想到的唯一方案,但这个地址很容易被伪造,起不到多大的辨识作用。:neutral:

jiangtao9999 发表于 2004-1-10 18:55:12

你只能找两台机器试验一下了………………
用 phpinfo()
看看那个变量不一样

snoopyxp 发表于 2004-1-10 18:57:00

我早试验过了, :cry:

Fujinsan 发表于 2004-1-11 14:30:27

那就用session或动态序列号来鉴别。

jiangtao9999 发表于 2004-1-11 15:19:32

用这个试试:
--------------------------------------------------------------------------------
函式:fsockopen()
--------------------------------------------------------------------------------



网路函式库


fsockopen
打开网路的 Socket 连结。

语法: int fsockopen(string hostname, int port, int , string , int );

传回值: 整数

函式种类: 网路系统




内容说明


目前这个函式提供二个 Socket 资料流介面,分别为 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。当在 Internet 情形下使用时,参数 hostname 及 port 分别代表网址及埠号。在 UNIX 情形可做 IPC,hostname 参数表示到 socket 的路径,port 设定为 0。可省略的 timeout 选项表示多久没有连上就中断。在使用本函式之后会传回档案指标,供档案函式使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。参数 errno 及 errstr 也是可省略的,主要当做错误处理使用。使用本函式,会使用搁置模式 (blocking mode) 处理,可用 set_socket_blocking() 转换成无搁置模式。




使用范例


本例用来模拟成 HTTP 连线。
<?php
$fp = fsockopen("php.wilson.gs", 80, &$errno, &$errstr, 10);
if(!$fp) {
      echo "$errstr ($errno)<br>\n";
} else {
      fputs($fp,"GET / HTTP/1.0\nHost: php.wilson.gs\n\n");
      while(!feof($fp)) {
                echo fgets($fp,128);
      }
      fclose($fp);
}
?&gt;

默难 发表于 2004-1-11 16:59:40

那客户服务器至少得运行这段代码吧,失去了跨平台性,譬如在不支持php的主机上就没法用,郁闷。

jiangtao9999 发表于 2004-1-11 21:45:42

那只好用应用程序来解决了……
页: [1]
查看完整版本: 遇到一超难问题,用php怎么获取远程调用者ip,内详,高手进