SQL 注入攻击也称为 SQL injection,网页有许多功能都需要资料库,例如会员登入、购物车等,都需要工程师在网页前端收到使用者的资料,储存於资料库,以便未来使用者登入输入帐密时,可以检查是否帐密正确。
而工程师在编写程序时,对於检查「使用者的输入」不够严格,可能输入的内容被程序以为是 SQL 语法,进而绕过检查机制或泄漏机敏资料
资料库类型有许多种,有 MySQL、Access、Microsoft SQL Server等,不同的资料库类型,会有不同的注入语法。
参考资料:https://www.slideshare.net/hugolu/sql-injection-61608454
是指使用者输入数字,资料库会根据使用者输入的数字,查询相关第N笔资料
通常数字型的 SQL 注入点会搭配其他手法来进行 SQL 注入,例如 UNION
假设今天欲从资料库中,依据 id 进行查询 news,则查询 id 为 1 的 news 所使用的 SQL 语法如下:
SELECT `title`, `content`
FROM `news`
WHERE `id` = 1;
以 PHP 为例,若网页後端要从 MySQL 查询 news,则需将指定的 id 嵌入 SQL 语法,再送给 MySQL 服务器执行。最简单的写法如下:
$res = mysqli_query($conn, "SELECT title, content FROM news WHERE id=".$_GET['id']");
以 https://localhost/news?id=1
为例,上述程序码中的 $_GET['id']
会取得 URL 中的参数 id ,因而合并後的字串为 "SELECT title, content FROM news WHERE id=1"
。然而,由於程序没有检查 $_GET['id']
是否为数字,若攻击者输入网址 https://localhost/news?id=1 OR 2 > 1
,则会构建出如下的 SQL :
SELECT `title`, `content`
FROM `news`
WHERE `id` = 1
OR 2 > 1;
由於 2 > 1
恒真,资料库就会将所有 news 都回传。
由此可见,若网页程序没有检查从 Client 端传来的资料,便将其嵌入 SQL 语法,攻击者便可能插入额外语法,藉此改变程序行为。结合明天将介绍的 UNION ,甚至可能将整个资料库的资料尽数泄漏出来。
参考资料:https://zhuanlan.zhihu.com/p/139737334
[https://localhost/news?id=1](https://localhost/news?id=1)
可以在 id=1
的地方改成 id=3-2
,看是否会进行计算
id=1
的结果,代表会根据输入的资料进行运算,代表可能是一个数字型注入id=3
的样子,表示网页程序可能有对输入转型为数字,因此後面非数字的字串没有生效。参考资料:https://blog.csdn.net/weixin_43749051/article/details/114295081
<<: #08 实作篇 — 使用 Next.js 的各种 Data Fetching 方式实作小专案 ft. Github API
>>: [Day21] 在 Codecademy 学 React ~ What's this? This is "this"! 之 this.props 篇
前面学习了基础的变数与运算子的使用,这些基础往往是非常枯燥乏味的,还没有与电脑有更进一步的互动,所...
文字及字体 文字大小及字体是我们在网页中最常设定跟调整的,在预设的字体中你可能找不到你想要的字体类型...
前言 position 里面有一个属性叫 relative,可以让物件根据原本的位置进行移动 tra...
GitHub Repo https://github.com/b2etw/Spring-Kotlin...
机器学习简介 (Machine Learning, ML) 机器学习是一种透过资料、特徵撷取以及训练...