18岁禁止网站
写给站长:年龄门该怎么写、应该拦到什么程度,以及为什么它从来不是一道身份核验。
01年龄门代码生成器
选好参数,下面生成可直接粘贴的代码。右边的预览按钮会在本页演示同样的交互,但不写入任何存储。
生成的代码只做一件事:在本地留一个布尔标记,并在标记不存在时遮住页面。它不验证身份,也不应该被当作验证。
02它确实能做到的事
表明态度
明确告知访客本站内容有年龄门槛。这件事本身有意义:它让误入者有机会退出,也让你的意图可被记录。
挡住顺手点进来的人
多数误入是无意的。一道确认就能把这部分人挡在外面,成本极低。
给过滤软件一个信号
配合页面上的分级标识,家长控制类软件和部分浏览器扩展可以据此识别并拦截,这一层由访客侧生效。
把责任链写清楚
确认文案、记录方式、有效期都是你可以说明的实现细节。出现争议时,有明确实现比口头声明可靠。
03它做不到的事
把这几条当成硬限制,不要用加功能的方式去弥补。
不是年龄核验
点一下按钮不能证明任何事。真正的年龄核验需要第三方身份或支付手段验证,客户端代码做不到,也不应该假装做到。
绕过成本接近零
清掉存储、换无痕窗口、直接请求子资源,都能跳过遮罩。遮罩只是视觉层,内容仍然在那条网址上。
挡不住直链
图片、视频、接口都可以被单独请求。要真正限制,必须在服务端对这些资源做访问控制,而不是在前端加遮罩。
不能代替法规要求
部分地区对特定内容有强制的年龄核验或备案要求,一道前端确认不构成合规。该查的法规要查,该做的服务端控制要做。
04标识、爬虫与一条底线
RTA标识是什么
ASACP在2006年末推出、2007年正式发布的一个页面标识,放在页头的meta标签里,用途是让家长过滤软件能识别出面向成人的站点。它是自愿贴的标签,由站点自己声明。
别指望浏览器替你拦
这类标识的生效前提是访客侧装了会读它的过滤工具。主流浏览器默认并不根据这类meta标签过滤页面,所以它是信号,不是屏障。
遮罩层与可抓取性
用JS加遮罩时,页面正文仍然在HTML里,爬虫照样能读到。这是正常的,不要为了遮住爬虫而输出两份内容。
绝对不要做的一件事
给爬虫和用户返回不同内容属于欺骗性做法,搜索引擎按作弊处理。要限制就在服务端对所有请求一致地限制,包括爬虫。
如果希望这类页面不进搜索结果,正确做法是用 robots 规则或 noindex 明确声明,而不是靠遮罩层假装内容不存在。
05记录与隐私:少存一点
只存布尔值和时间戳
确认过就记一个标记加过期时间,足够了。不要收集出生日期,收了就变成需要保护的个人信息,责任反而变重。
有效期要有上限
永久记住等于共用设备上的所有人都被默认确认过。七天到三十天是常见取舍,公共设备场景应该更短。
cookie要设好属性
用cookie记这个标记时带上 SameSite=Lax 和 Secure,并且不要把它和会话凭证放在一起。
给用户一条撤回的路
页面上留一个清除确认状态的入口,让共用设备的人能主动退出。这比把有效期设得很长更周全。