我有一个HTML表单,人们可以在我的网站上进行付款。而不是使用SSL,我想知道我是否可以使用JS lib来加密信用卡信息并以明文但加密的方式将其发送到服务器,而不是服务器将其解密。我发现有几个lib这样做,他们基本上要求服务器上的密钥对,加密它并将其加密到服务器。那些是我找到的:
http://www.hanewin.net/encrypt/
http://www.vincentcheung.ca/jsencryption/
这对于信用卡付款是否足够安全?我知道会话没有加密,但唯一真正重要的是信用卡信息,对吗?
答案 0 :(得分:33)
这在任何方式,形状或形式上都不安全。
中间人可以用自己的公钥代替公钥。您使用“referer”或除SSL之外的任何其他设置的任何kludge都不会恢复这种恶劣方案的安全性。
如果您可以获得免费的边际证书,或者几乎没有任何合适的证书,为什么还要使用人们的信用卡号?由于未能确保传输中的信用卡号码,您违反了PCI,并且可能使您承担的责任比获取和使用证书的成本高出许多倍。或者你可能只是想到这是持卡人的问题?
您无法完全在带内引导安全通道。您需要一些安全的媒介来交换密钥材料。这可能是证书颁发机构公钥的分发。或者也许会面对面分享一个秘密密钥。
无论采用何种方案,您都无法摆脱不安全感。
答案 1 :(得分:22)
如果您这样做,那么复制所有源代码,然后中毒DNS缓存甚至设置网上诱骗网站并将用户的付款发送到他们的银行帐户中都是微不足道的。
这是一个场景。
您完成了自己的网站example.com,并将所有内容放到网上。网站发布,是的。您已使用javascript来保护信用卡付款系统。
名为Nefarious Hacker的人注意到您没有使用经过验证的真实方法来保护重要的个人信息,因此他会下载所有HTML,JS和CSS。
ñ。黑客剥离所有基于js的加密,只留下表单。然后他在evil-example.com上主持它。它看起来像您的网站完全,其行为与您的网站完全相同。除了它将未加密的信用卡数据提交给N Hacker的数据库。
ñ。黑客发送一些钓鱼电子邮件,将用户指向evil-example.com。一些用户认为邪恶网站有效,提交付款。他们的信用卡现在被盗了。
N Hacker能够成功中毒DNS缓存,因此有些用户会访问example.com,而是提供了evil-example.com。他们没有理由相信该网站是假的(网址是他们所期望的),所以他们提交付款。他们的卡现在被盗了。
如果你有SSL证书,用户会立即知道evil-example.com不受信任,或者冒充example.com的evil-example.com是假的。
(我会把它变大,所以很明显)
答案 2 :(得分:17)
你可以这样做,但不要。它需要客户端的javascript,当你得到加密部分时,你可能会失去SSL的其他部分,即身份验证。使用您的方法可以使用中间攻击的人,而使用SSL证书则不太可能。
答案 3 :(得分:15)
您可以使用JS加密,并选择忽略它不安全的事实。
您遇到的问题是人们不希望在没有SSL连接的情况下在页面上输入信用卡详细信息。它不仅仅是技术人员;许多非技术用户在输入信用卡号之前都知道要查找挂锁,即使他们不知道TLS或SSL是什么。
答案 4 :(得分:12)
完全没有。请记住,SSL还允许客户端(浏览器)验证远程方(您的服务器)的真实性。您必须确保从中获取密钥的服务器实际上是您想要从中获取密钥的服务器而不是完全不同的计算机。 (参见Man in the middle)
答案 5 :(得分:12)
您可能从中获得的潜在法律问题是方式不值得避免SSL的费用。
答案 6 :(得分:10)
如果用户在浏览器中禁用JavaScript,该怎么办?我会说,玩它安全并坚持使用SSL。
答案 7 :(得分:9)
@stimms解释了为什么这是危险的 - SSL加密和确保加密数据也正确地到达正确的位置。最重要的是,浏览器会以不同方式处理SSL和非SSL缓存 - 如果您不通过SSL提供这些页面,则用户的浏览器可能会在用户的计算机上以明文形式存储重要信息。
即使非常安全,这也不是一个好主意。许多用户已经有了“寻找电子商务的锁定图标”的规则,这些规则由IT人员,技术娴熟的亲戚等钻进他们的大脑。对于SSL证书,只需花25美元。
编辑:另一个潜在问题 - 大多数信用卡公司都需要通过SSL进行传输。仅使用JS进行操作可能会违反您的商家协议 - 可能会导致罚款和终止。
答案 8 :(得分:9)
Ggolo,真的很老兄,不要这样做。任何通过信用卡详细信息的网站都会引起黑客的注意,如果他们努力尝试,他们会发现一些错误或利用你的手工方法。只是为了获得SSL证书。
答案 9 :(得分:9)
虽然从技术上讲,在JS中加密的数据类似于使用真实证书加密它,但我认为你在这里缺少一个关键元素;信任。当使用来自可信提供商的真实SSL证书时,您正在建立一个信任圈:
当您拥有一个不安全的网站时,如果您的数据是安全的,只需忽略您的网络浏览器告诉您的内容,那么客户就不会信任您。
(如果他们这样做,那么转发我的信息,我有一个桥梁卖给他们......)
此外,对于它的价值,主要的CC公司有关于如何处理和存储信用卡信息的标准。 Google“PCI DSS”了解详情,或:https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml
答案 10 :(得分:8)
除了其他人提出的要点之外,SSL是一个既定的标准,每个Web浏览器都内置了对该标准的支持。浏览器GUI以某种方式更改,以便让我知道我正在使用安全连接,如果需要,我可以检查证书详细信息。
浏览器对你提出的任何本土计划都没有任何支持。
答案 11 :(得分:1)
PCI DSS标准现在是一项要求,所以即使你可以用JS做这件事(正如本页已经广泛讨论过的那样 - 你做不到),那么你仍然不会获得PCI认证,所以你不会允许使用它。
如果您绝对不想购买SSL证书,请查看您的支付提供商服务。他们中的大多数提供第三方托管解决方案,如Paypal,SagePay等,您从您的网站传递到提供商网站,以获取信用卡详细信息,然后传回。
这可以减轻您的负担a)遵守规定并且b)购买ssl证书。
答案 12 :(得分:0)
不,因为你仍然容易受到中间人攻击。
但您可以使用它来大幅降低PCI合规性要求,因为如果您使用没有私钥的公钥加密信用卡号,那么您就会转移合规性负担。
即使付款处理商也鼓励这样做。例如,参见Braintree关于client-side encryption的文章。
答案 13 :(得分: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,Yahoo! PayDirect。
给他们打电话!
当然,总有PayPal