Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CSRF-伪造的帖子可以包含任意数据吗?_Javascript_Post_Security_Csrf - Fatal编程技术网

Javascript CSRF-伪造的帖子可以包含任意数据吗?

Javascript CSRF-伪造的帖子可以包含任意数据吗?,javascript,post,security,csrf,Javascript,Post,Security,Csrf,不受信任的网站可以通过创建表单并将其发布到目标网站来构建伪造的帖子请求。但是,此帖子的原始内容将由浏览器编码为以下格式: param1=value1&param2=value2 不受信任的网站是否有可能构建包含任意原始内容的伪造帖子——比如字符串化JSON {param1: value1, param2: value2} 换句话说:网站会导致浏览器向第三方域发布任意内容吗?是!,POST请求只不过是发送到web服务器的具有特定格式的文本。您可以使用IE或Chrome开发者工具查看每个

不受信任的网站可以通过创建表单并将其发布到目标网站来构建伪造的帖子请求。但是,此帖子的原始内容将由浏览器编码为以下格式:

param1=value1&param2=value2
不受信任的网站是否有可能构建包含任意原始内容的伪造帖子——比如字符串化JSON

{param1: value1, param2: value2}

换句话说:网站会导致浏览器向第三方域发布任意内容吗?是!,POST请求只不过是发送到web服务器的具有特定格式的文本。您可以使用IE或Chrome开发者工具查看每个请求的外观

因此,是的,您可以创建伪造的POST请求并更改任何您想要的内容,但是如果请求的格式不正确,大多数web服务器将拒绝它


对于纯HTML表单,是的,它将始终按照。但也有类似的MIME多部分。还有一个问题是Javascript和。仅在一种情况下特别提到编码。这强烈意味着在其他情况下没有应用编码。

网站的客户端代码很难伪造这样的请求,但服务器端代码很容易做到这一点


由于您的网站无法判断请求是来自浏览器还是行为与浏览器类似的服务器,因此浏览器中的限制不起保护作用。

HTML表单请求的帖子正文始终为,或者是因为它们反映了请求的有效值。尤其地因此,这里可以使用基于表单的CSRF,但是,它要求服务器将其接受为
text/plain


此外,基于XHR的CSRF还可以用作。唯一剩下的障碍是同源策略:只有当两者都具有相同的来源或者您的服务器支持并允许资源共享时,才能伪造此类有效的POST请求。

您可以通过常规表单POST创建有效的JSON。这只是创造性地命名表单参数的问题。特别是,参数名称可以包含引号


对不起,我指的是创建这些帖子的不可信网站,而不是客户。我已经更新了这个问题。CSRF只有在请求还包含用户身份时才起作用——因此我不担心非浏览器客户端伪造请求。您所说的“困难”是指不可能吗?这真的是一个问题:可能吗?@JS_Riddler:程序在任何方面都可以充当浏览器,因此用户身份不是一种保护。有人甚至可以使用任何开源浏览器项目,并将其重写以执行任何操作,因此,即使任何当前浏览器无法发送包含任意内容的帖子,也绝对有可能执行此操作。在这种情况下,请求不会被伪造,因为它们将由用户生成。我真正想说的是:HTML规范中禁止浏览器向其他域发送任意帖子内容。我相信是的,但我想确认一下。@JS_ridler:HTML规范并没有说任何类似的事情。我不知道HTTP规范中是否有与此相关的内容,但浏览器中的安全限制通常比标准规定的要严格得多。无论如何,你可以很容易地设置一个网页,通过代理服务器发布请求,并将请求发送到你的服务器,这样访问者就可以发布一个表单,其中的内容可以被替换。@JS_ridler the。我认为这个被接受的答案对于text/plain来说是完全错误的。有关伪造XML的信息,请参见此示例:。同样的技术也可以用在类似的事情上。对我来说,依赖application/json从未被添加似乎仍然很危险;我认为象征性/暂时性的标准防御在这里是明智的。请参阅。如果内容类型为application/json,浏览器是否会拒绝发送表单请求?