[SUCTF 2019]EasySQL 1-【SQL注入】

这题是SQL注入,简单来说就是利用漏洞偷看数据库内容。

第一步,试了试,发现后台过滤了关键字,比如union和select。
输入数字有回显,但都是1 ,这说明后台可能把数字当成了0来处理。

第二步,我在数字前面加了个星号,发现能解出flag。
可能后台把星号当成了通配符或者有其他处理。

第三步,我用堆叠注入,尝试了1 ;show databases;,发现有个叫Flag的数据库。
再试1 ;show tables;,发现Flag表。

第四步,我改了sql_mode,把||当成了字符串连接符,这样就能拼接出flag了。

MySQL里的||,平时是逻辑或,但这里我把它当成了字符串连接符。

堆叠注入就是用分号把多条SQL语句连起来执行,比如1 ;show databases;。

Burpsuite是个工具,可以帮你批量测试,避免手动一个一个试。

总结一下,这题就是利用SQL注入漏洞,通过不同方法最终拿到flag。
你自己看,这些步骤怎么用吧。

mysql中主键和外键的关系 主外键关联关系详解

哎,这玩意儿说起来简单,但真用起来,坑不少。
我跟你唠唠我踩过的坑。

前年我在一个电商项目上,搞用户和订单表。
用户表没啥,就一user_id自增主键。
订单表呢,就想着用user_id做外键,关联到用户表。
一开始想着,简单啊,ONDELETECASCADE,删用户自动删订单,完美。

结果呢?用户量一上来,每次删个用户,订单表跟着哗哗删,整个系统卡半天。
一查,原来外键约束在后台老检查引用完整性。
批量操作的时候,那个检查特别耗时。
最后没办法,我们搞了个定时任务,先禁用外键检查,等数据批量导入完了,再打开。
虽然解决了问题,但风险也挺大,万一中间出点啥乱子,数据对不上了咋办?所以你看,外键是好东西,但用不好也耽误事儿。

还有一次,在一个老系统上改代码,本来想着优化一下,把订单表user_id外键改成ONDELETESETNULL。
结果测试环境一跑,数据全成了null。
一问才知道,之前开发的时候,有人直接把用户删了,订单user_id自然就变成了null,外键没约束,随便改。
这下好了,全乱了。
所以你看,ONDELETECASCADE、ONDELETESETNULL,这玩意儿得慎用,搞不好就是灾难。

还有分布式系统,外键那更是白搭。
我在一个分库分表的系统里干过,外键根本没法跨库用。
想用外键约束,要么数据全在一张库里,要么就别用外键,搞应用层逻辑。
当时真是头大,本来想用数据库约束省事儿,结果发现根本行不通。

所以你看,主键、外键,听着简单,真用起来,得结合实际场景。
数据量小,用外键挺好,数据量大,或者分布式系统,就得另想办法。
别光图省事儿,有时候省事儿的地方,后面可能就是个大坑。

mysql如何设计考试试卷和题目表

哈,听起来这个MySQL考试系统的设计还蛮周到的。
咱们来聊聊这个设计的好处吧。

首先,题型灵活支持这一点我觉得挺重要的。
考试嘛,题型多变是常事,这个设计通过question_type字段直接区分了五种题型,然后选项和答案分表存储,这样就能适应不同题型的需求了。
比如单选题、多选题、判断题和填空题,它们的处理方式肯定是不一样的。

然后就是高复用性,这个我也很喜欢。
题目是独立于试卷存在的,这样通过exam_questions关联表,就能实现多试卷复用同一题目。
比如说,一道数学题,你可以把它放在不同的试卷里,这样既能节省资源,也能保证试卷的连贯性。

评分便捷性也是这个设计的一大亮点。
exam_questions表里明确记录了每题的分值,这对于自动阅卷和成绩计算来说,可是非常重要的数据基础。

结构规范化也是这个设计的一大优点。
通过拆分选项、答案、试卷关系,避免了冗余字段,完全符合数据库的第三范式,这样不仅能提高数据的一致性,还能让系统更加稳定。

最后,扩展性强这个点,我觉得也是这个设计的一大优势。
以后要添加考生答题记录、考试安排、错题本等扩展功能,这个框架已经搭好了,只需要根据实际需求来扩展功能表就可以了。

至于扩展功能建议,我觉得可以考虑以下几点:
1 . 考生答题记录表:记录考生每道题的作答情况,这样考生可以查看到自己的答题情况,对提高答题质量有帮助。

2 . 考试安排表:管理考试时间、考场等安排信息,这对于组织考试来说非常关键。

3 . 错题本表:跟踪考生高频错误题目,这样可以帮助考生针对性地复习。

4 . 试卷模板表:支持快速生成相似试卷,这个对于考试管理员来说,可以节省大量的时间和精力。

反正这个设计看起来还是挺全面的,我觉得可以按照这个思路继续完善。
我还在想这个问题,你看着办吧。