› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
Delete
V2EX  ›  MySQL

SQL 实践问题求教

  •  
  •   Delete · Apr 3, 2018 · 4064 views
    This topic created in 3128 days ago, the information mentioned may be changed or developed.

    大神们好,我是做 Java Web 开发的新手,最近遇到个问题如下:

    MySQL 问题,一个帖子 [tiezi],属于某个用户 [uid] 的。
    那么,更新一个帖子的字段 [status],是直接
    UPDATE tiezi SET status = 1 WHERE id = 1000

    还是说,要加上帖子所属的用户 ID,例如
    UPDATE tiezi SET status = 1 WHERE id = 1000 AND uid = 123;

    1. 后面这条 SQL 的查询效率会不会变低? id 是主键,性能应该就没影响了吧

    2. 想这么做的原因是,有一个 HTTP API 是修改帖子 status 的,uid 是调用这条 SQL 的登录用户,如果那个人的登录验证被黑客拿到了,黑客又知道了这条 HTTP API,那黑客岂不是可以修改不属于他的帖子的 status 了,所以后面加一个 uid 校验应该不亏吧。。。

    老司机们觉得我这个安全性担心有没有必要?

    还是说,对 HTTP API 的参数进行签名,防止篡改,比改 SQL 更关键?

    10 replies  •  2018-04-04 11:07:01 +08:00
    Mitt
        1
    Mitt  
       Apr 3, 2018 via iPhone   ❤️ 1
    安全设计问题 不应该动 sql 语句 治标不治本
    hcymk2
        2
    hcymk2  
       Apr 3, 2018   ❤️ 1
    uid = 123 估计会被数据库自动优化掉。
    m939594960
        3
    m939594960  
       Apr 3, 2018   ❤️ 1
    首先你这个安全性的担心一定是有必要的,一切用户的输入都要默认认为是不安全的。 如果不判断 uid 这种叫平行越权是存在很大问题的。

    关于第一个问题,我觉得应该不会低,至少 mysql 是这样的,其他的就不清楚了。 我觉得这类判断能在程序里做就最好不要在 sql 里做
    mingl0280
        4
    mingl0280  
       Apr 4, 2018   ❤️ 1
    这种操作是服务器验证的事情(一次性 token 验证),不要给数据库做。数据库可以做但是不是最佳选择。
    jjianwen68
        5
    jjianwen68  
       Apr 4, 2018 via Android   ❤️ 1
    应该程序中验证操作人是否有效,是否有操作权限,帖子是否有效,这些验证过,执教更新是使用帖子 ID 就够了吧
    jorneyr
        6
    jorneyr  
       Apr 4, 2018   ❤️ 1
    id 是主键吧,有索引了,如果不是,给它加索引即可,where 的时候 id 在左边,会先用 id 的索引进行搜索,然后再和 uid 比较,效率没问题。
    加个 uid 还是有必要的,权限验证并不会进行数据粒度的验证,只是判断你有没有某种权限的操作,不会判断这种操作下的数据是否属于你,操作不属于自己的数据应该尽量避免。
    zhongkouwei
        7
    zhongkouwei  
       Apr 4, 2018   ❤️ 1
    从性能上讲,有索引的话 uid 条件会被忽略。这样做确实可以在一定程度解决安全问题。但权限验证和数据接口应该是解耦的吧。比如有这样一个逻辑:管理员要修改这条帖子,难道再另外写条 sql 吗
    fanhaipeng0403
        8
    fanhaipeng0403  
       Apr 4, 2018   ❤️ 1
    对 HTTP API 的参数进行签名,防止篡改,比改 SQL 更关键
    rxzxf1993
        9
    rxzxf1993  
       Apr 4, 2018   ❤️ 1
    请求加 token 就好了 跟 sql 无关
    vincenttone
        10
    vincenttone  
       Apr 4, 2018   ❤️ 1
    1. id 是主键的话,加不加 uid 一个效果。
    2. 你的意思是黑客拿得到 id 拿不到 uid 吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5074 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 09:10 · PVG 17:10 · LAX 02:10 · JFK 05:10
    ♥ Do have faith in what you're doing.