2

我有一个 HTML 表单,人们可以在我的网站上进行付款。除了使用 SSL,我想知道是否可以使用 JS 库来加密信用卡信息并以明文但加密的形式将其发送到服务器,而不是服务器将其解密。我发现了几个这样做的库,它们基本上要求从服务器获取密钥对,对其进行加密并将其发送到加密的服务器。这些是我找到的:

http://www.jcryption.org/

http://www.hanewin.net/encrypt/

http://www.vincentcheung.ca/jsencryption/

这对于信用卡支付是否足够安全?我知道会话没有加密,但唯一真正重要的是信用卡信息,对吧?

4

14 回答 14

33

这在任何方面、形状或形式上都不安全。

中间人可以用自己的公钥替换公钥。您使用“referer”或除 SSL 之外的任何其他东西设计的任何组合都不会恢复这个残暴方案的安全性。

当您可以免费获得边际证书或几乎一无所有的体面证书时,您为什么要乱用人们的信用卡号码?由于未能在传输过程中确保信用卡号,您违反了 PCI,并且可能使自己承担比获取和使用证书的成本高出许多倍的责任。或者,也许您只是认为这是持卡人的问题?

不能完全在带内引导安全通道。您需要一些安全介质来交换密钥材料。这可能是认证机构公钥的分发。或者也许面对面会面以共享密钥。

无论采用何种方案,您都无法从不安全中建立安全。

于 2009-11-17T17:16:25.650 回答
23

不,不要使用 JavaScript 来保护信用卡付款。

如果您这样做了,那么有人复制您的所有源代码,然后毒害 DNS 缓存甚至设置网络钓鱼站点并将您的用户的付款发送到他们的银行帐户,这将是微不足道的。

这是一个场景。

  1. 您完成了您的网站 example.com,并将所有内容放到了网上。网站启动,耶。您已使用 javascript 来保护您的信用卡支付系统。

  2. 一个名叫 Nefarious Hacker 的人注意到您没有使用经过验证的方法来保护重要的个人信息,因此他下载了您的所有 HTML、JS 和 CSS。

  3. N. Hacker 去掉所有基于 js 的加密,只留下表单。然后他在 evil-example.com 上托管它。它看起来与您的网站一模一样,行为与您的网站一模一样除了它将未加密的信用卡数据提交给 N Hacker 的数据库。

  4. N. Hacker 会发送一些钓鱼邮件,将用户指向 evil-example.com。一些用户相信这个邪恶的网站是有效的,提交了付款。他们的信用卡现在被盗了。

  5. N Hacker 能够成功毒化 DNS 缓存,因此一些访问 example.com 的用户会被 evil-example.com 提供服务。他们没有理由相信该网站是假的(网址是他们所期望的),因此他们提交了付款。他们的卡现在被盗了。

如果您有 SSL 证书,用户会立即知道 evil-example.com 不受信任,或者冒充 example.com 的 evil-example.com 是假的。

(我会把它变大,所以很明显)

底线 - javascript 不够安全,无法进行 CC 付款

于 2009-11-17T16:58:28.953 回答
17

你可以这样做,但不要这样做。它需要客户端的 javascript,当您获得加密部分时,您可能会丢失 SSL 的另一部分,即身份验证。使用您的方法,中间人攻击是可能的,而使用 SSL 证书的可能性要小得多。

于 2009-11-17T16:54:50.013 回答
15

您可以使用 JS 加密并选择忽略它不安全的事实。

您遇到的问题是人们不想在没有 SSL 连接的页面上输入他们的信用卡详细信息。不仅仅是技术人员;许多非技术用户知道在输入他们的信用卡号之前要查找挂锁,即使他们不知道 TLS 或 SSL 是什么。

于 2009-11-17T16:54:59.937 回答
12

一点也不。请记住,SSL 还允许客户端(浏览器)验证远程方(您的服务器)的真实性。您必须确保从中获取密钥的服务器实际上是您要从中获取密钥的服务器而不是完全不同的机器。(比较中间的人

于 2009-11-17T16:55:56.563 回答
12

您可能会因此而遇到的潜在法律问题值得避免 SSL 的成本。

于 2009-11-17T17:01:00.913 回答
10

如果用户在浏览器中禁用 JavaScript 会怎样?我会说,安全起见并坚持使用 SSL。

于 2009-11-17T16:55:16.237 回答
9

@stimms 很好地解释了为什么这是危险的 - SSL 进行加密确保加密数据也可以到达正确的位置。最重要的是,浏览器对 SSL 和非 SSL 缓存的处理方式不同——如果您不通过 SSL 提供这些页面,则用户的浏览器可能会将重要信息以明文形式存储在用户的计算机上。

即使完全安全,这也不是一个好主意。许多用户已经被 IT 人员、精通技术的亲戚等人灌输了“为电子商务寻找锁定图标”的规则。春天只需 25 美元即可获得 SSL 证书。

编辑:另一个潜在问题 - 大多数信用卡公司需要通过 SSL 传输。仅使用 JS 这样做很可能违反您的商家协议 - 罚款和终止可能会随之而来。

于 2009-11-17T16:58:56.997 回答
9

Ggolo,说真的,伙计,不要这样做。任何传递信用卡详细信息的网站都会引起黑客的注意,如果他们足够努力,他们会在你的手动方法中发现一些错误或漏洞。只需为 SSL 证书做准备。

于 2009-11-17T17:26:54.537 回答
9

虽然从技术上讲,用 JS 加密的数据类似于用真正的证书加密它,但我认为你在这里缺少一个关键元素;相信。使用来自受信任提供商的真实 SSL 证书时,您正在建立一个信任圈:

  • 客户信任微软
  • Microsoft 信任 GoDaddy/Verisign/whoever(通过 Windows 或任何其他带有根证书的 Web 浏览器)
  • GoDaddy/威瑞信/信任您的人(由于您从他们那里购买了证书,并且他们验证了您的身份)
  • 网络浏览器中出现绿灯和锁,用户可以根据需要自行检查证书,这反过来意味着客户信任您。

如果您只有一个不安全的网站,并带有“您的数据是安全的,请忽略您的网络浏览器告诉您的内容”这样的话,那么客户就不信任您了。

(如果他们这样做,那么将他们的信息转发给我,我有一座桥梁可以卖给他们......)

此外,对于它的价值,主要 CC 公司都有关于如何处理和存储信用卡信息的标准。谷歌“PCI DSS”了解详情,或:https ://www.pcisecuritystandards.org/security_standards/pci_dss.shtml

于 2009-11-17T17:32:09.897 回答
8

除了其他人提出的观点之外,SSL 是一个既定标准,每个 Web 浏览器都内置了对该标准的支持。浏览器 GUI 以某种方式更改,让我知道我正在使用安全连接,如果我愿意,我可以检查证书详细信息。

浏览器不支持您提出的任何本土方案。

于 2009-11-17T17:12:32.107 回答
1

PCI DSS 标准现在是一项要求,因此即使您可以使用 JS 执行此操作(如本页已广泛讨论的那样 - 您不能),您仍然不会获得 PCI 批准,因此您不会被允许使用它。

如果您绝对想避免购买 SSL 证书,请查看您的支付提供商服务。他们中的大多数提供第三方托管解决方案,例如 Paypal、SagePay 等,您从您的网站传递到提供商网站以获取信用卡详细信息,然后再传回。

这消除了您的负担 a) 合规 b) 购买 ssl 证书。

于 2010-05-04T15:01:19.983 回答
0

不,因为您仍然容易受到中间人攻击。

但是您可以使用它来大大降低您的 PCI 合规性要求,因为如果您使用没有私钥的公钥加密信用卡号,那么您就可以转移合规性的负担。

甚至支付处理商也鼓励这样做。例如,参见 Braintree 关于客户端加密的文章。

于 2013-07-17T14:29:46.207 回答
0

绝对没有

如果您想接受信用卡付款,但又不想自己正确操作,那么有些服务机构专门从事这方面的工作。

这里有几个:

2CheckOut、Affero、BTClick&Buy、CCAvenue、CCBill、CCNow、ClickBank、DigiBuy、DigitalCandle、FastPay、iBill、iKobo、ImagineNation、InstaBill、Jettis、Kagi、MembershipPlus、Moneybookers、MultiCards、MyPaySystems、NoChex、PartyKey、Pay-Line、Paymate、 Process54、ProPay、Reg.Net、RegNow、RegSoft、Share*It、StormPay、SWREG、V-Share、Verotel、VolPay、雅虎!直接支付。

这是一个更完整的列表

给他们打电话!

当然,总是有PayPal

于 2013-11-14T20:49:46.857 回答