社区
基础编程
帖子详情
没有用到InnoDB,能不能解决这个安全隐患
天降大任于斯
2009-05-09 03:00:42
逻辑是:
查询表A,看是否符合条件
符合条件,执行正常逻辑,把表A的条件修改成否
现在遇到的问题是,表A的条件修改还没执行完,下一条语句又来了,导致执行了N次正常逻辑
这个地方该怎么控制呢?
比如说csdn的这个每天登陆一次送可用分,应该是查询一个最好活跃时间,如果最后活跃时间不是今天,说明是第一次登陆,送分,然后更改活跃时间
如果页面刷新足够快,还没有执行完更改活跃时间又刷新了一下,导致送了两次分,在非InnoDB的结构中怎么实现控制
...全文
82
7
打赏
收藏
没有用到InnoDB,能不能解决这个安全隐患
逻辑是: 查询表A,看是否符合条件 符合条件,执行正常逻辑,把表A的条件修改成否 现在遇到的问题是,表A的条件修改还没执行完,下一条语句又来了,导致执行了N次正常逻辑 这个地方该怎么控制呢? 比如说csdn的这个每天登陆一次送可用分,应该是查询一个最好活跃时间,如果最后活跃时间不是今天,说明是第一次登陆,送分,然后更改活跃时间 如果页面刷新足够快,还没有执行完更改活跃时间又刷新了一下,导致送了两次分,在非InnoDB的结构中怎么实现控制
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shishirui
2009-05-12
打赏
举报
回复
5楼,我说的不是事务,重点在于行锁
strayly
2009-05-12
打赏
举报
回复
这种情况应该很少出现吧,不过可以设置个session变量来表示状态,
在查询之前设置状态为1,查询之后,更新可用分或其它操作完成再把状态设为0
如果状态为1时再刷新,就提示系统忙
海诗美妆
2009-05-11
打赏
举报
回复
这个问题跟事务处理没有关系,也就是说,换成InnoDB也解决不了你的问题。
此问题应归属于重复更新问题,例如,注册用户的时候,insert语句在“注册完成画面”执行的情况。
一次注册完成,在“注册完成画面”刷新浏览器,只是相同用户信息重复注册的漏洞,这都是相近的问题。
-治标的解决方法:
链接或者按钮使用JavaScript控制,默认状态下有效,如果被按下一次就让其失效。
此方法实现起来比较方便,缺点是治标不治本。不过,对于大多数网站已经够用了。
-治本的解决方法:
1.在form中镶入hidden的标示字串,在同一session内,做过更新处理之后,更换此字串。
2.更新处理时,客户端发送的标示字串跟session内保存的字串不同,就禁止处理,相同则允许处理。
此方法如果没有框架支持,实现成本比较高,但是最根本的解决办法。
shishirui2
2009-05-10
打赏
举报
回复
用行锁,锁定记录,就可以
先 select * from table for update
然后再使用update
注意这两个操作要放在事务中
wang_quan_li
2009-05-09
打赏
举报
回复
已经做了防刷新
应该网
2009-05-09
打赏
举报
回复
没遇到过这样的情况,自己写的程序也没出现过这样的情况。
可以用相应的脚本限制刷新和短时间内重复查询。
还有,你举的例子中送分和更新最后登录时间可以是同一时间进行的(更新一个表中的数据)。如果是两条sql查询,那几乎也是同一时间进行的,又怎么会反复执行呢。第二次判断的时候就不会送了
lonelyriver
2009-05-09
打赏
举报
回复
境界还不够 帮你顶
linux信号量对mysql_MySQL 信号量semaphore 和
innodb
_adaptive_hash_index
最近碰见案例,MySQL环境使用5.7.19~5.7.22版本 或 更低版本,经常会碰到以下信息:
InnoDB
: Warning: a long semaphore wait:813 --Thread 139957495039744 has waited at btr0cur.cc line 545 for 241.00 seconds ...
MySQL实战:Buffer Pool 提高页的访问速度
如何知道哪个缓存页没有使用? 单纯的lru链表有很多问题 mysql> SHOW VARIABLES LIKE '
innodb
_old_blocks_pct'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-----...
【开发篇】MySQL的事务控制、锁定语句和
安全
问题
MySQL的事务控制、锁定语句和
安全
问题一、锁定语句1、锁定机制简介2、LOCK TABLE 和 UNLOCK TABLE二、事务1、事务的特性2、事务控制3、分布式事务的使用三、SQL中的
安全
问题1. SQL 注入简介2. 应用开发中可以采取的...
MySQL:配置调优(三)
System:这个是效率最高的,比如像where id=xxxx,但是在这里有个点我要说一下,就是啥吧,在MySQL5.7版本之前使用这类sql是可以出现System类型的,但是在5.7版本之后呢,就不会出现这个System类型了,转而是以Const...
22-08-26 西安 MySQL高级(04)索引失效、关联查询优化、排序分组优化、千万级数据分页的优化、
Innodb
的行锁
最佳左前缀法则:指的是查询从索引的最左前列开始并且不跳过索引中的列。...
InnoDB
的行锁,是通过锁住索引来实现的,如果加锁查询的时候没有使
用到
索引,会将整个聚簇索引都锁住,相当于锁表了。.........
基础编程
21,886
社区成员
140,364
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章