Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 防止更改HTML表单操作_Javascript_Html_Forms_Xss_Action - Fatal编程技术网

Javascript 防止更改HTML表单操作

Javascript 防止更改HTML表单操作,javascript,html,forms,xss,action,Javascript,Html,Forms,Xss,Action,我的页面上有一个表单,用户可以在其中输入他们的信用卡数据。在HTML中是否可以将表单的动作标记为常量,以防止恶意JavaScript更改表单的动作属性?我可以想象一个XSS攻击,它改变表单URL,让用户将他们的秘密数据发布到攻击者的站点 可能吗?或者,web浏览器中是否有其他功能可以防止此类攻击的发生?没有什么可以真正阻止它 我建议做的唯一一件事是对从用户表单发送到服务器的任何信息进行服务器端验证 俗话说:永远不要相信用户这种攻击是可能的,但这是防止这种攻击的错误方法。如果黑客可以更改表单的详细

我的页面上有一个表单,用户可以在其中输入他们的信用卡数据。在HTML中是否可以将表单的动作标记为常量,以防止恶意JavaScript更改表单的动作属性?我可以想象一个XSS攻击,它改变表单URL,让用户将他们的秘密数据发布到攻击者的站点


可能吗?或者,web浏览器中是否有其他功能可以防止此类攻击的发生?

没有什么可以真正阻止它

我建议做的唯一一件事是对从用户表单发送到服务器的任何信息进行服务器端验证


俗话说:永远不要相信用户

这种攻击是可能的,但这是防止这种攻击的错误方法。如果黑客可以更改表单的详细信息,他们也可以通过AJAX
GET
轻松发送机密数据,而无需提交表单。防止XSS攻击的正确方法是确保对页面上所有不受信任的内容进行编码,从而使黑客首先无法执行自己的JavaScript。
更多关于编码

StackOverflow上的示例代码是一个很好的编码示例。想象一下,如果每次有人发布JavaScript示例时,它都会在浏览器中执行,那将是多么混乱。例如:

alert('foo')

如果不是因为对上述代码段进行了编码,您可能会看到一个警报框。这当然是一个相当无害的脚本——我可以编写一些JavaScript代码,劫持您的会话cookie并将其发送到evil.com/hacked-sessions。然而,幸运的是,SO并不认为每个人都是出于好意,而是对内容进行编码。例如,如果您查看源代码,您会看到SO将我的完全有效的HTML和JavaScript编码为:

scripttype=“text/javascript”警报('foo')/脚本

因此,与其在我使用它们的地方嵌入实际的
字符,不如将它们替换为HTML编码的等价物(
),这意味着我的代码不再代表脚本标记

不管怎样,这就是编码背后的基本思想。有关如何编码的更多信息,这取决于您使用的服务器端,但大多数web框架都包含某种“开箱即用”的HTML编码实用程序。您的责任是确保用户提供的(或不受信任的)内容在呈现之前始终进行编码

web浏览器中是否有不同的功能 防止此类攻击发生

新的浏览器版本通过新的标题解决了您的问题

通过配置,您可以完全禁止内联javascript。请注意,此保护不一定会扩展到旧浏览器上的用户(请参阅)


只允许使用白色标签的脚本将击败大多数javascript XSS攻击,但可能需要对内容进行重大修改。另外,如果您使用的web框架严重依赖内联javascript,那么阻止内联javascript可能是不切实际的。

我认为这个问题更多的是关于保护用户。保护用户?来自什么?无意中。他们可能认为他们将数据发布到了同一个站点,但数据被发送到了其他地方。@MichałFronczyk我知道你无法阻止这种情况发生。你所说的“编码”到底是什么意思?听起来不错,但我不确定这会涉及到什么技术。我知道防止XSS攻击的最好方法是对所有内容进行编码。但这很难,你总是可以忘记一个领域。由于同源策略,使用AJAX发送机密数据并不容易。我仍然可以看到拥有这样的功能的一些优点。@Michal-将数据发送到跨源服务器非常容易。您所要做的就是插入一个指向脚本src=xxx的脚本标记“并将数据作为查询参数放入脚本标记URL。这就是JSONP的工作原理,尽管这里不需要JSONP仅仅将数据发送到其他服务器。@Michał-使用
GET
请求通过AJAX发送机密数据实际上非常容易。就RESTful语义而言,它不是很“正确”,但我不认为黑客会在这一点上失眠。尝试按您要求的方式阻止XSS是非常不明智的。这有点像问“我如何防止我偷来的车被开到维加斯?”一旦你解决了这个问题,你必须阻止他们把车开到西雅图,然后是洛杉矶,等等。您最好只是学习如何正确地锁上门(即完全防止XSS):p@jmar777-你说得对。我同意防止XSS是最好的方法。我并不是说我建议的功能应该用来防止这种攻击。我的想法是,这可能是一个很好的功能,可以防止在您意外忘记编码JS时发生攻击。只是再检查一下。顺便说一句,如果仍然很容易调用其他域的URL,为什么我们需要同源策略:)恶意JavaScript首先是如何进入表单的?付款表单是否允许显示用户提交的内容(XSS)?那将是一种不同寻常的付款方式。