gatewayrest服务打开了SAP环境,供受信任的SAP环境之外的客户端(包括那些邪恶的浏览器)使用和操作。众所周知,网络是不可信任的。因此,网关体系结构的一个关键方面是减轻基于web的安全攻击的影响。
web上最易被利用的安全漏洞之一是跨站点请求伪造。CSRF攻击的本质是恶意站点误导信任站点相信事务请求是经过用户批准的。CSRF攻击的工作原理如下:1)在用户与应用程序站点建立了一个经过身份验证的会话之后,2)用户仍然在这个经过身份验证的浏览器会话中访问一个恶意站点,恶意站点欺骗用户向恶意站点实际构建的应用程序站点发送请求。使信任站点误以为请求来自经过身份验证和授权的用户的批准,而实际上它来自恶意站点。因此名称跨站点请求伪造。
CSRF攻击的成功取决于三个因素:
第一个因素是社会工程的共同利用。用户不知何故被引诱从恶意站点将javascript代码加载到当前浏览器会话中,而用户甚至不知道。典型的例子是向用户发送一封带有隐藏javascript代码的电子邮件,当用户打开它时,一个请求被发送到恶意站点。防范这种风险的方法是将工具(邮件过滤器)和教育用户(不要只打开任何收到的邮件)结合起来。虽然这两种安全措施的质量都有所提高(是的,用户也越来越意识到网络上的风险),但这种保护肯定还不是100%万无一失。注意只有通过浏览器使用webservices时,这个因素才存在。对于本机应用程序,以及对于本机应用程序中的嵌入式浏览器(例如Fiori客户端、Kapsel、Cordova),用户不能访问其他站点,也不能使其客户端上下文受到感染妥协了第二个因素是所有浏览器都固有的。如果没有它,从浏览器发送的每个请求首先需要通过与远程web应用程序的身份验证协议,包括浏览器重定向、身份存储。在用户名/密码浏览器登录的情况下,用户必须反复输入其凭据。因此,需要在初始身份验证之后保留身份验证状态,以避免身份验证协议处理的处理和时间流逝,并防止不满意的用户。用户友好性和安全性经常是矛盾的。
CSRF保护集中在第三个因素:确保请求不能(自动)预测并由此构建。引入CSRF令牌保护CSRF令牌保护的本质是令牌是一个只有经过身份验证的浏览器会话和信任站点才知道的密钥,并且经过身份验证的浏览器会话必须包括在对信任站点的每个修改请求中,以便使信任站点相信该请求是在得到信任站点的同意的情况下发出的用户.CSRF令牌保护在现代Web应用程序平台上使用,包括SAP ICF、Microsoft IIS、,…
SAP Gateway应用以下协议来防止CSRF:
如上所述,CSRF攻击取决于恶意站点自动构造恶意请求的能力,下一步用户以某种方式被引诱发送到信任站点,这是精心设计的,以误导信任网站的请求是经过身份验证的用户批准的。
URL,包括REST操作通常是静态的;可以合理地"猜测"。由于同一来源仅适用于httpget请求,因此也可以发送来自恶意站点的PUT/POST/DELETE请求。但是为了让sapicf和网关信任并执行这样的事务请求,请求必须用CSRF令牌作为请求头+cookie中的密钥进行签名。浏览器会自动包含请求中的所有cookie。但是浏览器不会自动重用/添加请求头,因此恶意代码必须在XmlHttpRequest中明确地设置它。但是,CSRF令牌值只能由与网关webservice来自同一域的JavaScript代码检索和读取。而不是源于另一个外部域的JavaScript代码。因此,恶意代码不能合理地构造一个完整的事务请求,请求头和客户端cookie中都包含正确的CSRF令牌值。网关可以检测到恶意请求是不合法的。
注意:这篇文章发表在我的个人但专业的博客上,关于网关开发主题/http://wvstrien.blogspot.nl/2014/08/gateway-protection-against-cross-site.html
你好,威廉,
谢谢你在这里分享信息
每个人都有关于CSRF Token的问题和这里的
解释得很好,对理解GW中CSRF Token的具体工作非常有帮助。
很好。
问候,
Ashwin
你好,Ashwin,
很高兴你感谢我写的东西,很高兴听到它很有帮助。
谢谢你的反馈。
问候,William。
William van Strien
很高兴CSRF令牌有效性有时间限制吗?如果我必须在一个小时的时间跨度内发出两个POST请求,那么相同的CSRF令牌(已经在GET request中检索到)是否可以工作?
Rgrds,
JK
Hi-Jitendra,云快卖,
网关/ICF颁发的令牌在ICF/SAP会话的生存期内有效;如果该令牌过期,则该令牌将失效。如果webapplication客户端向您的会话发出请求,您的会话将保持活动状态;如果在一小时内未发出任何请求,则会话可能会过期,您需要设置一个websession。请注意,您还必须使用Gateway重新验证以实例化新的已验证会话。