好的,但随后出现了安全问题。假设我们在该SaaS系统中有两个独立的客户。一个名叫Jack,拥有jack.com,其帐户ID为100001。另一个是Nancy,nancy.com,和100002。Jack可以将代码片段添加到他的表单中,并添加一些"data-"属性,但如果他在其中一个"data-"属性中设置他的帐户ID为100002而不是100001,则会出现安全问题。这意味着Nancy会突然在她的帐户中看到Jack的数据。不好!当然,解决方法是在Jack的SaaS帐户中设置一些设置,使他只接受来自jack.com的数据,而Nancy只接受来自nancy.com的数据。
但是,可能会出现潜在的漏洞。黑客只需在自己的服务器上创建一个欺骗页面,其中形成类似的JSON,并通过工作站上的/ etc / hosts文件更改使其看起来像是jack.com。因为SaaS服务认为信息来自jack.com,所以他可以向Jack的帐户中发送成千上万个虚假的营销表单信息。
在jQuery代码或SaaS服务使用的PHP代码中,有什么我可以做的来确保黑客无法进行欺骗,只有Jack的真实客户数据被发送? 已回答的问题 Q1. “您如何识别Jack和Nancy?通过域名吗?”
A1. Jack拥有他的域名jack.com。Nancy拥有她的域名nancy.com。两者都使用这个营销SaaS服务,但在注册SaaS服务之前,它们已经共同使用了一种电子商务表单。他们在SaaS文档中被告知,“只需在表单页面中放置scraper.js,并将这些数据标签添加到您的表单标记和HTML输入、文本区域和选择标记中,以便scraper.js可以暂时拦截这些表单提交,从该表单中获取营销数据(例如全名和电子邮件),然后让该表单按照您已经拥有的工作流程进行提交。数据属性将标识要使用哪个帐户,以及将此数据存储在SaaS服务中的哪个营销活动和子活动中。”然而,在scraper.js的jQuery中,它将传递JSON的location.href属性,以便知道使用了哪个域名 - jack.com还是nancy.com,在这种特定情况下。问题是 - location.href可以被黑客欺骗,他在工作站上设置了一个127.0.0.1的/ etc / hosts文件条目,运行相同的JSON代码的副本。
问题2:“如果您可以使用从SaaS.com到jack.com的回调机制,那该怎么办?因此,您的一个数据属性将指定回调函数以接收来自SaaS.com的数据,并且只在获得正确响应时保存数据?”
答案2:这真是一个有趣的想法。是的,所以我可以在jack.com上放置额外的PHP页面,发出“OK”。当SaaS.com从jack.com接收JSON数据后,它会向jack.com上的第二个PHP回调页面发送请求,并使用file_get_contents()确保不仅获取OK响应,还要匹配IP地址和SSL证书数据。如果两者不同,则最有可能请求是伪造的黑客请求,可以安全记录并拒绝交易。(我可以轻松进行IP地址验证,但不确定如何在PHP中验证相同的两个SSL证书,即使这是允许或可能的。)当然,IP地址可以被欺骗。
另一层安全性是,这个第二个PHP页面可以使用SaaS.com和jack.com之间的公钥/私钥交换通信检查,而不仅仅是发出“OK”。
问题3:“为什么要拦截付款信息并通过Javascript发送?”
A3. 绝对不是的。这个问题从来没有指定发送付款信息。相反,是要求提供全名和电子邮件等信息。是的,为了安全地发送数据,需要使用SSL通信。此外,我们还需要使用JSONP以解决CORS问题。A4. 不需要。请参阅答案A2。通过该机制,SaaS应用程序接收数据,但在发生以下两件事之前不信任它:
它回调到jack.com的第二个页面,并确保返回的响应具有与首次发送表单数据的IP地址相同的IP地址。
在第二个页面中进行公钥/私钥交换检查(黑客显然无法欺骗除非他们有服务器访问权限),以确保未发生IP欺骗。
问题5. 稍等片刻。A2和A4存在问题。最初发送请求的IP地址将来自用户的工作站,而不是服务器。因此,您无法通过这种方式验证IP。您将不得不使用另一种机制来验证某人是否在jack.com上完成了表单,并且它不是来自欺骗jack.com的黑客。
答案5. 您说得对。我忘记了这一点,可能因为我在处理另一个项目时有些分心。我需要再考虑一下这个问题。
jack.com
把所有内容都保存在数据库中以进行验证吗?如果是这样,为什么还要使用SaaS应用程序呢? - ceejayoz