编辑:所以共识很清楚,它应该被消毒.我想要了解的是为什么?如果能够查看他们插入到站点中的脚本的唯一用户是用户自己,那么他唯一可以做的就是自己执行脚本,他可以在没有我的站点参与的情况下执行该脚本.这里的威胁载体是什么?
解决方法
问题在于,有很多方法可以让其他人查看该页面,这是您无法控制的方式.他们甚至可能在同事的计算机上打开页面并让他们看一下.无可否认,这是一个额外的攻击媒介.
示例:没有持久存储的pastebin;你发布,你得到的结果,就是这样.可以插入一个脚本,该脚本会不显眼地添加“捐赠”按钮以链接到您的PayPal帐户.把它放在足够人的电脑上,希望有人捐款,……
我同意这不是最令人震惊和现实的例子.但是,一旦你必须用“可能但听起来不太糟糕”来保护与安全相关的决定,你就知道你越过了某条线.
否则,我不同意“从不信任用户输入”这样的答案.没有背景,这种说法毫无意义.关键是如何定义用户输入,这是整个问题.从语义上如何信任?在语法?达到什么水平;只是尺寸?适当的HTML?
unicode字符的子集?答案取决于具体情况.一个裸网络服务器“不信任用户输入”,但今天有很多网站被黑客攻击,因为“用户输入”的界限取决于你的观点.
底线:避免让任何人对您的产品产生任何影响,除非困倦的,非技术性的消费者明白什么和谁.
从一开始就排除了几乎所有的JS和HTML.
P.S.:在我看来,OP首先要问这个问题值得赞扬. “不要相信你的用户”不是软件开发的黄金法则.这是一个不好的经验法则,因为它太具有破坏性;它在定义产品与外部世界之间可接受的相互作用的前沿方面有所瑕疵.这听起来像头脑风暴的结束,而它应该开始一个.
软件开发的核心是为您的应用程序创建一个清晰的界面.该界面中的所有内容都是实现,其外部的一切都是安全性.让一个程序做你想要的事情是如此令人费心,一个人容易忘记让它不做任何其他事情.
将您尝试构建的应用程序描绘成精美的图片或照片.使用软件,您尝试近似该图像.您使用规格作为草图,因此在此处,您的规格越粗糙,草图就越模糊.不过,你理想的应用程序的轮廓很薄!您尝试使用代码重新创建该图像.小心地填写草图的轮廓.核心,这很容易.使用宽刷:模糊的草图与否,这部分显然需要着色.在边缘,它变得更加微妙.这是当你意识到你的草图不完美时.如果你走得太远,你的程序开始做你不想要的事情,其中一些可能非常糟糕.
当您看到模糊的线条时,您可以做两件事:仔细观察您的理想图像并尝试优化草图,或者只是停止着色.如果你做后者,你很可能不会走得太远.但是,您最多也只能粗略地理解您的理想程序.而你仍然可能无意中越过了线!只是因为你不确定它在哪里.
你在寻找那条模糊的线条并尝试重新定义它的过程中得到了我的祝福.越接近边缘,你越确定它在哪里,越不可能越过它.
无论如何,在我看来,这个问题不是安全问题,而是设计问题:你的应用程序的界限是什么,你的实现如何反映它们?
如果答案是“永不信任用户输入”,则草图模糊不清.
(如果你不同意:如果OP适用于“testxsshere.com”怎么办?繁荣!check-mate.)
(有人应该注册testxsshere.com)