PHP一般如何防止站外提交数据?

我现在用其他编程语言(delphi)做了一个工具、尝试向某网站采集一些信息、不过要获取信息需要用户登录、登录需要一个验证码、于是我做了下面的工作:
(采用indy中的idhttp控件实现、允许cookies)

1.设置各种头信息(UserAgent,Referer等等)
2.GET验证码(地址形式为xxx.php?act=init)
3.设置好一个要发送的包
4.向表单提交地址(user.action.php?action=login)以POST形式发送

但是无论如何、网站均返回结果验证码错误、请问这可能是什么原因、

因为我对PHP不太了解、服务端一般这个是怎么验证的?

我概念里验证码的实现都是在服务端创建一个session、然后把用户提交与之前保存的对比、这样在参数传递过程中唯一涉及的就是一个session id、我看了下保存在cookies中的session id一直没有改变过、没有理由会说验证码失败.....求高手解释

作者: gam2046   发布时间: 2011-06-12

验证码如果你的delphi程序没有写识别那么你就自己在上面做一个验证码人工输入,之后登录后让程序再开始采集吧. 还是你的程序已经做了这部分而提示验证码失败,那么就先跟一下数据看看是否正常登录了。

作者: PhpNewnew   发布时间: 2011-06-12

引用 1 楼 phpnewnew 的回复:

验证码如果你的delphi程序没有写识别那么你就自己在上面做一个验证码人工输入,之后登录后让程序再开始采集吧. 还是你的程序已经做了这部分而提示验证码失败,那么就先跟一下数据看看是否正常登录了。


验证码可以自动识别了、而且我再三确认过、识别的结果是正确的、我也尝试过把图像显示出来、手动输入、都提示验证码错误

作者: gam2046   发布时间: 2011-06-12

设置一些特殊的变量,检查它是否存在。

作者: happypiggy2010   发布时间: 2011-06-12

引用 3 楼 happypiggy2010 的回复:

设置一些特殊的变量,检查它是否存在。


可以简单的给出一个伪代码的例子么、这个描述我想不到网站是如何实现的...

作者: gam2046   发布时间: 2011-06-12

你用抓包工具、或者浏览器插件如httpwatch firebug等,看看是如何提交数据的

用程序完全模拟即可

听你描述,有可能是cookie出了点问题

通常不会在HTTP header 头域里传递数据,如果通不过,你也可以注意下

作者: amani11   发布时间: 2011-06-12