首页 / 开发文档 / 表单、搜索与会员

表单、搜索与会员

留言表单、搜索框、会员登录状态,以及防刷与验证码。

留言表单

<form method="post" action="{naicha:url type="message"}" data-guard="1">
  <input type="hidden" name="_token" value="{naicha:token}">
  <input type="hidden" name="form" value="contact">

  <!-- 蜜罐:正常人不会填这一栏,填了就判定为机器人 -->
  <div style="position:absolute;left:-9999px">
    <input type="text" name="website" tabindex="-1" autocomplete="off">
  </div>

  <input type="text" name="name" required>
  <textarea name="content" required></textarea>
  <button type="submit">提交</button>
</form>

三个要点:

  • _token 是 CSRF 令牌,缺了会被直接拒绝
  • website 是蜜罐字段,用 CSS 藏起来而不是 type="hidden" —— 隐藏域会被机器人识破
  • data-guard="1" 让前端脚本做提交频率限制

搜索

<form method="get" action="{naicha:url type="search"}">
  <input type="text" name="kw" value="{naicha:search}">
  <button>搜索</button>
</form>

搜索结果页用 {naicha:param name="kw"} 取关键词,用 {naicha:list keyword="..."} 取结果。

会员状态

{naicha:user}
  {naicha:if var="user.logged" eq="1"}
    <span>你好,{user.nickname}</span>
    <a href="{naicha:url type="user"}/logout">退出</a>
  {naicha:else}
    <a href="{naicha:url type="user"}/login">登录</a>
  {/naicha:if}
{/naicha:user}

防刷机制

机制作用
CSRF 令牌阻止第三方站点伪造你的身份提交
蜜罐字段拦掉大部分表单机器人
提交间隔限制同一来源的两次提交之间强制间隔
登录失败限流15 分钟内失败 5 次即临时锁定该账号 + IP
图形验证码可在设置里开启,进一步抬高自动化成本
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。