【问题标题】:How to handle user comments in a database如何处理数据库中的用户评论
【发布时间】:2012-10-04 05:12:20
【问题描述】:

我计划将用户 cmets 存储在数据库中,并且想知道如何存储用户将提供的原始文本,因为它可能包含任何内容。这方面的常见/良好做法是什么?我需要解析文本还是应该使用特殊的存储类型?解析可能很长的用户 cmets 似乎需要很多开销,而且我不想篡改消息的预期含义等。同时处理评论/论坛帖子似乎很奇怪庄园说一个用户名/密码和消毒。

我正在使用sqlite3 和一些脚本来查询数据库,并计划按照以下方式实现一些东西:

page_id    post_number    username    content
-------    -----------    --------    -------
1          1              user_23     blah there's blah "quote" blah;':".,-=.

但是,当然,如果我只是将 content 参数扩展为 INSERT 查询,' " 等就会出现各种问题。

我应该如何处理这个表中的content;它甚至应该在这样的桌子上吗?我应该使用什么数据类型等等。

【问题讨论】:

  • 一旦数据在数据库中,它是“安全的”。重要的是插入/更新的机制,以及您在检索时所做的事情。
  • @MarcB:那么,处理帖子/cmets 是正常的吗?我习惯于为用户名/密码而烦恼,但以前没有处理过。我有一半希望有人说“你这个傻瓜,你应该做x”。例如,当我刚刚发布我的问题时,是否解析了我的问题、转义字符并将其作为文本/blob 插入到表格中?
  • 基本上,是的。我不知道他们在后端做了什么样的处理,但基本上就是这样。将评论/答案框的内容拉出,转义文本(也许做一些 html 验证/清理),然后将其填充到表格中。
  • 请注意,您还需要担心XSS vulnerabilies。不过,它们与数据库无关。

标签: python database sqlite cgi


【解决方案1】:

要使用的数据类型取决于输入的整体大小。 文字是我的首选。

有关 sqlite3 数据类型的更多信息,请参阅 http://www.sqlite.org/datatype3.html

我会推荐你 清理输入,只允许必要的标记。 对内容进行编码,以便安全地插入数据库。

如果安全是一个严重的问题,这个处理应该在服务器端完成。将一些处理负载放到 javascript 上不会有什么坏处,这将减少在服务器上完成的工作。但是它仍然会捕获试图绕过该功能的用户。

【讨论】:

    【解决方案2】:

    为避免 SQL 注入攻击,使查询字符串的格式化更容易,并使处理 blob 数据成为可能,所有数据库都支持parameters

    在 Python 中,它看起来像这样:

    id = 1
    text = "blah ..."
    cursor.execute("INSERT INTO mytable(id, content) VALUES(?, ?)", (id, text))
    

    【讨论】:

      【解决方案3】:

      我不喜欢 python,但是你的 DB 驱动程序没有处理它吗?否则,您必须手动替换转义字符。

      看看这个线程: How to string format SQL IN clause with Python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-30
        • 2021-08-31
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多