php - SQL 注入(inject) - 向表中插入数据

标签 php mysql sql sql-injection

<分区>

所以我正在尝试在本地托管的网页上练习 SQL 注入(inject)。我是 SQL 的新手,尤其是 SQL 注入(inject)。我已经对将新条目注入(inject)表进行了一些研究,但是当我尝试执行时,它似乎不起作用。

首先,我的网页是一个登录。我有用户名和密码(很明显)并且可以在没有附加任何 SQL 注入(inject)的情况下登录。但是当我将注入(inject)代码添加到用户名框中时,它不起作用。 示例:

    username: admin'; insert into hall values (3,'https://google.com','Google'); --
    password: 123321

在我的大厅表中,我有 3 个条目:id、链接、目的地。 ID 是一个整数,链接和目标是 varchars。

我需要做什么才能成功地将此条目注入(inject)并添加到数据库中?是否需要输入正确的用户名和密码,只输入用户名,还是其他?

最佳答案

不,您不需要输入正确的用户名和密码。以下是步骤:

首先,确保您在 PHP 中使用内联查询。像这样:

sql = "SELECT * FROM accounts WHERE username = '$username' AND password = '$password'";

其次,确保 $username$password 变量直接从用户名和密码文本框中获取它们的值。

现在您可以通过在用户名文本框中输入任何值并在密码文本框中输入如下内容来测试 SQL 注入(inject)攻击:

x';delete from accounts where '0'='0

这将从您的accounts 表中删除所有记录。如果您想测试更多,可以输入任何其他 SQL。

编辑 只是为了解决一些观点,即只要您使用参数化查询,就不需要了解 SQL 注入(inject)的工作原理。

这是我在其他主题中看到的一个真实问题。了解事物的工作原理对于任何“优秀”的程序员来说都是绝对必要的。仅仅知道应该如何做事是不够的,如果您不知道为什么要那样做以及它们是如何工作的,那么您就不能成为一名“优秀”的程序员。所以是的,了解 SQL 注入(inject)、XSS、CSRF 等攻击的工作原理对于任何有经验的程序员来说都是必须的。

看到所有那些有经验的程序员告诉新手他们并不真的需要理解,这真的很可悲。为什么?他们想成为唯一知道的人吗?他们认为其他人不够聪明吗?我不知道,但这至少可以说不是 StackOverflow 的精神,因此我认为应该标记并删除此类声明。

此外,参数化查询并不能阻止所有类型的 SQL 注入(inject),因为并非所有内容都可以参数化(例如,列和表名、值数组等),但是通过了解 SQL 注入(inject)的工作原理,您就会知道在这些情况下该怎么做。以此查询为例:

SELECT * FROM students WHERE status IN(,,,,)

如果数组具有已知数量的值,那么您可以将它们作为参数发送,但如果您确实必须具有未知数量的值,那么您需要知道如何保护您的查询。除非您了解您面临的是什么,否则您无法保护您的查询。在这种情况下,您可以在循环中创建参数,但您必须知道如何正确执行此操作。

这是一个question on SO在这个问题上有很好的答案。

关于php - SQL 注入(inject) - 向表中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605579/

相关文章:

php - php中如何计算两个不同长度数组的相似度百分比

php - 日期年份错误

php - Ajax 在下拉列表中发送相同的值但不同的选项

sql - 如何在查询结果上运行函数?

php - 是否可以创建一个涉及 3 个表和条件语句的触发器?

php - 我可以使用 JQuery 变量来选择 MYSQL 列吗?

javascript - PHP -(如果 INSERT true)回显消息禁用/关闭 .js 文件中的 jQuery 功能

mysql - exec 任务中的 `<` 字符破坏了我的 Phing 构建脚本

sql - 按条款分组以获得最高薪员工的姓名

如果另一列中的单元格部分相似,SQL 会给单元格相同的值