Javascript 预防<;脚本>;html表单输入中的标记

Javascript 预防<;脚本>;html表单输入中的标记,javascript,html,forms,security,xss,Javascript,Html,Forms,Security,Xss,我开发了一个网站,可以访问。一些用户试图通过使用HTML表单输入中的标记使我的网站重定向到其他网站。我不完全确定他是如何做到这一点的,但有没有什么方法可以阻止用户首先在表单中输入标记?转义HTML实体,以便最佳做法是在服务器上清理用户输入,但在没有服务器的环境中,任何人都可以简单地绕过这一点 无论哪种方式,您都可以通过调用此函数进行清理(简单地说就是使数据不能通过脚本运行) function sanitize(s) { return s.replace(/&/g, '&a

我开发了一个网站,可以访问。一些用户试图通过使用HTML表单输入中的标记使我的网站重定向到其他网站。我不完全确定他是如何做到这一点的,但有没有什么方法可以阻止用户首先在表单中输入标记?

转义HTML实体,以便
最佳做法是在服务器上清理用户输入,但在没有服务器的环境中,任何人都可以简单地绕过这一点

无论哪种方式,您都可以通过调用此函数进行清理(简单地说就是使数据不能通过脚本运行)

 function sanitize(s) {
       return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/"/g, '&quot;');
   }
函数清理{

返回s.replace(/&/g,“&;”)。replace(/在存储表单输入之前,检查每个字段中的HTML标记,并将其删除或拒绝帖子。(查找

我不完全清楚,我应该修改哪些实体?@SanchitBatra所有这些实体。如果您使用的是PHP,请使用
htmlentities()
当显示任何用户提供的输入时。这缺少一个实体列表以及如何操作。描述如何使用此功能很重要。@Ryan是的,我刚刚意识到我仍然迷路了lol@SanchitBatra:阅读页面顶部的重复链接:PHP有一个内置的
htmlspecialchars
函数(假设您使用的是PHP),您应该在生成输出时使用它;并且使用它,但它似乎不起作用。我做错了吗?@SanchitBatra:你不会在输入时这样做,而是在生成输出时这样做。例如,如果你在数据库中存储用户名并将其放入
$name
,而不是
,你会做
,以确保
$name
的安全放入HTML。
才有危险,正确的替换位置是在输出上,而不是在输入上。我不同意Ryan的观点,你需要防止无效数据进入你的系统。一旦它超过了单一的输入点,你就在存储无效和危险的数据。即使你保护了在您认为是其唯一出路的地方使用它,随着时间的推移,它可以迁移并找到一种新的方式进入野外。在服务器上停止它,让睡眠更轻松。验证数据是一个好主意,但这并不能免除您逃避它(即执行替换)有效的输入也无法与攻击区分开来:我的姓包含撇号,您的SQL最好能够正确插入它。