1

https:xyz dot com/authenticate/cc.php

这是我注册的第 3 页……我的会员在此输入他们的信用卡。这与我的 authorize.net 帐户相关联。

我最近注意到的一件事是,只需输入 URL 即可单独访问此页面。没有必要的预 URL 可以引导它。这似乎不安全,但无论是否有人想滥用它,他们都可以通过注册过程并继续提交错误的 CC 号码.. 花钱对吗?

我不记得我们是否对它设置了 IP 限制,或者如果这甚至是 100% 保护。我很确定我们做了一些事情,如果他们使用他们的号码(临时存储)输入万事达卡并且它被退回为无效它将匹配并且不允许他们继续输入错误的 16 位数号码。我是否应该让该页面可访问而无需特定页面允许访问并担心 IP 限制?难道不能有人只是继续切换他们的 ip 并使用不正确的 CC 或假的 CC 提交此页面吗?

考虑到我/失去我的商家帐户可能会面临风险,保护此页面的正确方法是什么?

先感谢您

4

1 回答 1

0

奇怪的是,您允许直接访问流程的第三步,用户名、地址等所有其他数据在哪里?

这是我要做的一些想法,一个完全安全的系统(可能不存在)将比我的简单步骤复杂得多。

请注意,您可能希望首先允许用户注册一些您可以知道他们是谁的信息(经过验证的电子邮件、经过验证的电话号码等),然后才进行信用卡操作,如果他们不断输入错误或无效的号码,您可以执行其他操作,例如将他们列入黑名单、打电话给他们、侮辱他们等。

note 2我花了很长时间写这个,我越读越想它似乎越糟糕,但既然已经写了,我还是会发布它。

开始前的一些注意事项:

  • 只有一个地址,例如/authenticate/auth.php
  • 该过程具有“状态”,并且根据此,它将显示/执行不同的操作。
  • 对于不同的州,还有其他额外的文件,具体取决于州。
  • 进程启动后,会创建一个会话并将其与用户 IP、进程状态和有关用户的任何其他可识别信息(例如“User-Agent”)相关联,这些数据将保存在服务器中。
  • 似乎您想使用不同的页面显示不同的状态,所以会是这样。但实际上我会在一个页面中使用 ajax 调用。
  • 没有可疑IP 地址的黑名单(正常或错误或完全错误的请求太多),如果需要可以添加,但复杂性会增加。你可能想也可能不想这样做,也许一个验证码就足够了,但是..
  • 在某些情况下没有验证码可能会有所帮助,但我在此处描述的会话处理可能需要更改。
  • 没有您可能想做的电子邮件验证

假设进程状态是 ask_name、ask_address、ask_cc 等...

因此,当对 auth 页面 (/authenticate/auth.php) 有任何请求时,我们可以这样做:

1 如果“Referer”不是来自可能的流程启动器之一(主页等)或此页面(/authenticate/auth.php),我们将重定向到主页。结束

第一步可以避免人们直接写地址或来自不受信任的页面。

2 如果没有此请求的会话信息:

2.1 如果有'user_name'参数并且'Referer'是这个页面(/authenticate/auth.php)

2.1.1 如果该用户名已经注册,则显示(包括,不重定向)'ask_name.php',并附加“用户已注册”的额外通知。结束

2.1.2 为该用户创建一个会话,将其与它的IP、用户代理等、其他数据相关联。

2.1.3 设置状态为ask_address(第二个)并显示'ask_address.php'。结束

2.2 Else(无参数或'Referer'错误)

2.2.1 显示“ask_name.php”。结束

第二步显示第一个屏幕(ask_user)或第二个屏幕(ask_name),它会延迟会话的创建,直到我们确定用户想要做一些真实的事情。

它有几个问题:

  • 一些用户(或程序)在没有会话但使用“用户名”的情况下连续发送请求,因此迫使您始终检查用户是否有效,并且可能会减慢速度。这可以使用几种不同的技术来避免,例如使用验证码或将某些 IP 列入黑名单一段时间。
  • 有可能一个用户使用不存在的“user_name”启动该过程,但他很慢并且需要一些时间来完成该过程,而在这种情况下,第二个用户开始并以相同的方式完成该过程'user_name',所以当第一个用户要完成时,它会在最后一步失败。这可以通过几种不同的技术来避免,这些技术留作练习。

3 如果有这个请求的会话信息(这是上一步的else

3.1 如果referer不是这个页面或者服务器中存储的IP和当前请求不一样或者其他一些数据比如User Agent不同或者状态无效(不在状态列表中),删除会话ID请求(因此浏览器将其删除)并显示“ask_name.php”以及额外的通知“看起来您的设备已更改!!!”。结束

3.2“包含”状态页面:

3.2.1 如果参数通过且正确,则将状态设置为-next-state,并为其显示页面。如果是最后一个状态,做一些适合最后一个状态的事情。结束

3.2.2 显示此状态的相同页面,并显示错误消息供用户重试。结束

最后一步尝试确保请求不是来自其他计算机和/或会话密钥被盗。

于 2012-11-10T15:01:19.107 回答