安全存储代码(html/js.)到数据库中

时间:2014-09-08 作者:user759235

所以我正在开发一个小插件,这个插件允许用户将数据保存到我的db中。此数据大部分为纯文本,但有3个字段将在其中包含标记。

1个字段可用于保存所有类型的代码(js/php/html….)进入我的数据库,2个字段只能接受JS代码。

我的问题是,我应该如何将此类数据保存到DB中,以防止注入等。

我对整个验证工作还是新手,所以任何提示和帮助都很好(不要在下面的评论中添加指向wordpress文档的链接,我已经读过了)

我的代码到现在为止

  $wpdb->insert($table,
      array(
          \'field-no-tags\'       => sanitize_text_field($_POST[\'field-no-tags\']),
          \'field-have-all-tags\' => $_POST[\'field-have-all-tags\'],
          \'field-have-js-tags\'  => $_POST[\'field-have-js-tags\']
      )
      ,array(
          \'s%\',
          \'s%\',
      )
  );


  <form>

      <label>No code allowed</label>

      <textarea name="field-no-tags"></textarea>


      <label>All code allowed</label>

      <textarea name="field-have-all-tags"></textarea>


      <label>Only JS allowed</label>

      <textarea name="field-have-js-tags"></textarea>

      <button type="submit">Save</button>

  </form>

1 个回复
SO网友:Mark Kaplun

有两种可能的注入向量,服务器端和客户端

服务器端-只是不要编写自己的SQL,而使用更高级的DB访问API,在您的情况下可能是这样的update_option. 如果必须访问较低级别的DB,请确保API使用wpdb::prepare 生成SQL时,对于insert 但对于query 需要使用prepare 如果在查询中使用占位符。

客户端-您不应该让任何不是站点管理员的人来管理插件。这意味着它不适合在网络中使用,除非您将其访问权限限制为仅限超级管理员。任何其他配置都将允许站点用户对站点的其他用户进行XSS攻击。

结束

相关推荐

How many databases do I need?

我被要求为其他人建立另一个网站。最终,我会把它交给他们。我将在本地开发它,然后现场使用,然后移交完全控制权。同时,我需要一个数据库供WP使用。我是将新网站连接到我个人网站已有的现有数据库中,还是每个网站都有一个数据库?我不想把我的数据库和别人的数据库一起导出。