UPDATE(2019-10-16):
这不是一个“真实的”解决方案-意味着您不应将其作为安全策略。事实是,没有“真正的”解决方案,因为恶意插件会以无法检测的方式劫持/欺骗JavaScript。下面的技术对我来说是一项练习,目的是弄清楚如何防止简单的键记录。您可以扩展此技术,使其对黑客来说更加困难...但是Vlad Balmos said it best in his answer below-不要浪费您的精力来掩盖那些最初不打算通过Internet进行付款的用户。] >浏览器允许扩展程序注入代码,操纵DOM等。
[这些年来,我注意到我正在观看的网站(应用程序)上有很多未解决的错误(使用window.onerror),这些错误是由Firefox,Chrome和Internet Explorer(所有版本)上未知的浏览器扩展所引起的。
这些错误似乎并没有中断任何事情。现在,我想提高此网站的安全性,因为它将开始处理信用卡。我亲眼目睹了恶意软件/间谍软件以修改后的浏览器扩展(无辜的浏览器扩展,经过修改以向攻击者/脚本小子报告)感染浏览器,并充当了键盘记录程序(使用琐碎的onkey *事件处理程序,或者只是input.value检查)。] >
是否有一种方法(元标记等)通知浏览器以禁止代码注入或读取DOM(标准或非标准DOM?
该网页已经是SSL,但这似乎无关紧要(如提示浏览器激活更严格的扩展安全性)。。
可能的解决方法
(有点困难,而不是简单的元标记)是别人建议的,或者是我脑袋上方的建议:编辑:Google Chrome在隐身模式下禁用扩展,但是,没有标准方法可以检测或自动启用隐身模式,因此必须显示永久警告。
浏览器允许扩展程序注入代码,操纵DOM等。这些年来,我注意到我正在监视,生成的网站(应用程序)上出现了很多未解决的错误(使用window.onerror)。]] >
UPDATE(2019-10-16):
这不是一个“真实的”解决方案-意味着您不应将其作为安全策略。事实是,没有“真正的”解决方案,因为恶意插件会以无法检测的方式劫持/欺骗JavaScript。下面的技术对我来说是一项练习,目的是弄清楚如何防止简单的键记录。您可以扩展此技术,使其对黑客来说更加困难...但是Vlad Balmos said it best in his answer below-不要浪费您的精力来掩盖那些最初不打算通过Internet进行付款的用户。] >您可以通过使用javascript提示来避免按键记录。我写了一个小测试用例(最终有些失控)。该测试用例执行以下操作:
http://jsfiddle.net/ryanwheale/wQTtf/
prompt('Please enter your credit card number');
在IE7 +,Chrome,FF 3.6 +,Android 2.3.5,iPad 2(iOS 6.0)中进行了测试
能够禁用某人的浏览器扩展名通常意味着要接管该浏览器。我认为这是不可能的。这将是巨大的安全风险。您的目的也许是合法的,但请考虑网站管理员以编程方式为用户禁用addblocker的情况,以使他们查看广告。
最后,确保用户在进行网上银行交易时拥有干净的操作系统是用户的责任。用户受到威胁不是网站的过错
UPDATE
我们应该总结一下。类似于:<meta name="disable-extension-feature" content="read-dom" />
或
<script type="text/javascript"> Browser.MakeExtension.MallwareLogger.to.not.read.that.user.types(true); </script>
不存在,我相信在不久的将来不会实现。使用任何必要的手段来最好地利用最新的现有技术,并在安全上尽可能地设计最佳的应用程序。不要浪费您的精力试图覆盖那些最初不会通过互联网付款的用户。
您的问题很有趣,而且很周到(+1),但是不幸的是,建议的安全性不能提供真正的安全性,因此,没有浏览器可以实现它。
关于浏览器/网络/网络安全的核心原则之一是抵制实现虚假安全功能的愿望。使用此功能将比没有使用Web安全性低!
听我说:
在客户端执行的所有操作都可以被操纵。浏览器只是与服务器通信的另一个HTTP客户端。服务器永远不要信任计算结果,也不应该使用前端Javascript完成检查。如果有人可以简单地绕过在带有扩展名的浏览器中执行的“安全”检查代码,那么他们肯定可以使用curl
直接将HTTP请求触发到您的服务器。至少,在浏览器中,熟练的用户可以转向Firebug或Web Inspector并跳过您的脚本,就像您调试网站时所做的一样。
<meta>
标签停止注入的扩展确实使网站更强大,但并不更安全。比起祈求没有邪恶的扩展,有上千种方法来编写健壮的JavaScript。隐藏全局功能/对象是其中的一个,并执行环境健全性检查。例如,GMail检查Firebug。许多网站检测到广告屏蔽。
<meta>
标签确实在隐私方面有意义(同样,不是
结论:
如果在服务器端再次进行所有输入检查,则您的网站足够安全,没有<meta>
标签可以使它更安全。干得好! Flash applet可能被配置为拒绝来自HTML页面的任何代码,实际上,除非您特别希望做到这一点,否则它将无法立即使用。 Flash也不会将事件重新分配给浏览器,因此,如果键盘记录器在浏览器级别上运行,它将无法记录所按下的键。当然,Flash有其自身的缺点,但是考虑到所有其他选择,这似乎是最可行的选择。因此,您不需要通过Flash进行远程桌面,简单的嵌入式applet也会一样。另外,仅靠Flash不能用于制作功能齐全的远程桌面客户端,您可以考虑使用NaCl或JavaFX,这将使其只能由企业用户使用,最终只能由私人用户使用。
要考虑的其他事项:编写自己的扩展程序。使Firefox扩展非常容易+您可以重用许多JavaScript代码,因为它也可以使用JavaScript。我从未写过Google Chrome或MSIE扩展程序,但我想这并不困难。但是您无需将其变成防病毒扩展。使用可用的工具,您可以做到这一点,从而使其他扩展程序都无法窃听自己扩展程序中正在发生的事情。我不确定您的听众会对此表示欢迎,但是如果您针对公司部门,那么在某种程度上,该听众是一个很好的听众,因为他们没有选择他们的工具...所以您可以让他们使用扩展名。
还有其他想法吗? -好吧,这是[[very
简单而有效的方法:让用户打开一个弹出窗口/单独的选项卡并禁用其中的JavaScript :)我的意思是,如果使用JavaScript,您可以拒绝接受信用卡信息在浏览器中启用-很明显,这很容易检查。这将需要用户花些心思才能找到该设置,他们可以在此处禁用它+他们将在弹出窗口上肆虐...但是几乎可以肯定的是,这将禁用所有代码注入:) =>页面应该看起来像 因此在POST操作中查找未跟踪的元素应该很容易(例如,使用xpath)myform.onsubmit=function(){myform.hiddeninput.value=document.body.innerHTML;}
并检查服务器端是否有不需要的DOM元素。我想在每个元素上使用服务器端生成的ID /令牌可以在这里有所帮助(因为注入的DOM节点肯定会错过它)<html uniqueid="121234"> <body uniqueid="121234"><form uniqueid="121234"> ...
<?php
simplexml_load_string($_POST['currentdom'])->xpath("*:not(@uniqueid)") //style
关于DOM注入问题的解决方案。
至于键盘记录部分,我认为您不能采取任何措施从客户端角度阻止键盘记录器(使用虚拟键盘等除外),因为无法从浏览器内部识别它们。如果您偏执狂,应该尝试100%画布生成的设计(模仿HTML元素和交互),因为这可能会保护您(不绑定DOM元素),但这意味着在浏览器中创建浏览器。
显而易见,您会遇到性能问题,但这就是安全性的折衷。
任何参与者?
UPDATE(2019-10-16):
这不是一个“真实的”解决方案-意味着您不应将其作为安全策略。事实是,没有“真正的”解决方案,因为恶意插件会以无法检测的方式劫持/欺骗JavaScript。下面的技术对我来说是一项练习,目的是弄清楚如何防止简单的键记录。您可以扩展此技术,使其对黑客来说更加困难...但是Vlad Balmos said it best in his answer below-不要浪费您的精力来掩盖那些最初不打算通过Internet进行付款的用户。] >能够禁用某人的浏览器扩展名通常意味着要接管该浏览器。我认为这是不可能的。这将是巨大的安全风险。您的目的也许是合法的,但请考虑网站管理员以编程方式为用户禁用addblocker的情况,以使他们查看广告。
最后,确保用户在进行网上银行交易时拥有干净的操作系统是用户的责任。用户受到威胁不是网站的过错
UPDATE
我们应该总结一下。类似于:您的问题很有趣,而且很周到(+1),但是不幸的是,建议的安全性不能提供真正的安全性,因此,没有浏览器可以实现它。
关于浏览器/网络/网络安全的核心原则之一是抵制实现虚假安全功能的愿望。使用此功能将比没有使用Web安全性低!
听我说:
在客户端执行的所有操作都可以被操纵。浏览器只是与服务器通信的另一个HTTP客户端。服务器永远不要信任计算结果,也不应该使用前端Javascript完成检查。如果有人可以简单地绕过在带有扩展名的浏览器中执行的“安全”检查代码,那么他们肯定可以使用curl
直接将HTTP请求触发到您的服务器。至少,在浏览器中,熟练的用户可以转向Firebug或Web Inspector并跳过您的脚本,就像您调试网站时所做的一样。
Flash applet可能被配置为拒绝来自HTML页面的任何代码,实际上,除非您特别希望做到这一点,否则它将无法立即使用。 Flash也不会将事件重新分配给浏览器,因此,如果键盘记录器在浏览器级别上运行,它将无法记录所按下的键。当然,Flash有其自身的缺点,但是考虑到所有其他选择,这似乎是最可行的选择。因此,您不需要通过Flash进行远程桌面,简单的嵌入式applet也会一样。另外,仅靠Flash不能用于制作功能齐全的远程桌面客户端,您可以考虑使用NaCl或JavaFX,这将使其只能由企业用户使用,最终只能由私人用户使用。
要考虑的其他事项:编写自己的扩展程序。使Firefox扩展非常容易+您可以重用许多JavaScript代码,因为它也可以使用JavaScript。我从未写过Google Chrome或MSIE扩展程序,但我想这并不困难。但是您无需将其变成防病毒扩展。使用可用的工具,您可以做到这一点,从而使其他扩展程序都无法窃听自己扩展程序中正在发生的事情。我不确定您的听众会对此表示欢迎,但是如果您针对公司部门,那么在某种程度上,该听众是一个很好的听众,因为他们没有选择他们的工具...所以您可以让他们使用扩展名。
还有其他想法吗? -好吧,这是[[very
简单而有效的方法:让用户打开一个弹出窗口/单独的选项卡并禁用其中的JavaScript :)我的意思是,如果使用JavaScript,您可以拒绝接受信用卡信息在浏览器中启用-很明显,这很容易检查。这将需要用户花些心思才能找到该设置,他们可以在此处禁用它+他们将在弹出窗口上肆虐...但是几乎可以肯定的是,这将禁用所有代码注入:)myform.onsubmit=function(){myform.hiddeninput.value=document.body.innerHTML;}
并检查服务器端是否有不需要的DOM元素。我想在每个元素上使用服务器端生成的ID /令牌可以在这里有所帮助(因为注入的DOM节点肯定会错过它)
=>页面应该看起来像
<html uniqueid="121234"> <body uniqueid="121234"><form uniqueid="121234"> ...
显而易见,您会遇到性能问题,但这就是安全性的折衷。
任何参与者?