Recurly.js library released for secure, customizable checkout forms
js.recurly.com
js.recurly.com
Suggestion: add the text "a JavaScript library for the Recurly payments API" (or equivalent) somewhere on the page!
You are still required to maintain a secure network so that malicious code does not end up on your site. This means protecting your site from cross-site scripting. If your site is running untrusted Javascript code, your users could end up being redirected to a phishing site regardless of how you implement your order form (including linking offsite to a hosted page). As long as your server is secure, Recurly.js is secure.
The one scenario that is being pointed out here is from a malicious merchant. We work to make it easier for a merchant to be PCI compliant. If they are malicious and want to defraud their own customers, there are easier ways to post the credit card numbers straight to your server without our software.
On any given web page, it can easily bring in 10 or more external JS libraries. So the chance of one of them getting compromised can only go higher. You need to make sure that your product can survive a cross site scripting attack.
And you need to protect your product against your own merchant because those misbehaved merchants can give your business a bad name. Let them steal their users' credit card, but just don't let them steal it from Recurly's credit card form...
You could have solved these two security issues if you spend a little more effort and put the credit card form inside Recurly owned iframe. But I guess your engineering team took a short cut. :)
First of all, the biggest concern is attack surface. If credit cards went through your server, any complex web application would have a number of locations where the CC would be logged in plaintext. In this case a compromise would not only make it possible to collect new credit cards as they are entered into the system, but also past credit cards in logs. Any of the three options: iframes, hosted pages, and recurly.js, reduce this attack surface, because credit cards never pass through your backend to be logged, and the Recurly backend being PCI level 1, clearly prevents them from ever being logged.
Now, if say your web application was vulnerable to a XSS attack on one of your payment pages, it would be just as easy to replace the iframe src, and spoof the CC processor's hosted page, as it would be to drop in some js that reads the value of input fields and tunnels them out to the attacker. On that note... even an integration as seemingly foolproof as linking to a third party hosted page is vulnerable to the same attack, by replacing the href of the link.
The takeaway is that Recurly.js removes as much of the PCI scope as we possibly could without us building and hosting your entire website. Also, watch out for XSS attacks, and don't let your server get rooted.
You're exposing credit card number on the input field of the original publisher's HTML page. This means that the publisher can pick up the credit card number himself, or an included third party javascript library(like google analytics).
Obviously, you still have to maintain a secure web server regardless of how you collect payments. That means protecting your users from cross site scripting.
As far as I know, Recurly and Stripe are the only two processors providing JavaScript libraries to tokenize credit card information such that merchants do not handle the credit card information that suscepts them to PCI compliance.
While the user is entering the credit card number, there's a chance that someone can intercept and steal the CC.
You can easily solve this problem by putting the credit card form inside your own iframe. :)
The rule should be: if your app has a credit card form under its own banner, the whole thing is implicated for PCI assessments. But that's not the rule.
As part of Compliance, the merchant attests that he never handles the cardholder information, and that closes off huge portions of it.
These forms sure are pretty though.
I also wish it didn't depend on jQuery, but that's just personal preference.
Please, use your precious development time on more pressing issues related to making payment's even easier to accept and integrate!
Would hate to be the site that tried to simplify their billing but got an accessibility lawsuit[1] for their troubles.
[1]: http://en.wikipedia.org/wiki/National_Federation_of_the_Blin...
What a hateful, insensitive thing to say. Obviously the National Federation of the Blind isn't going to go after just any website, they are going to go after the larger ones that should know better. Big companies should absolutely be forced to accommodate people with disabilities, I would even say that is part of what makes the United States such a great country.
http://www.braintreepayments.com/services/pci-compliance
edit: So, w/ Recurly I wonder if it's the same thing and I'd need to do the Self Assessment Questionnaire A when using recurly.js
We launched our own Transparent Post back in March 2011. We created Recurly.js to simplify performing client-side validation, pricing calculations (w/ coupons, VAT, add-ons), and proper error handling when a transaction is declined. It's 10x easier to implement than Transparent Post, and has a much better user experience for the customer.
But, going to hold off for now and just use hosted payment pages for a bit. Will likely use this in the near future though - thanks to the Recurly team.