数据库编程时需要注意的两点!

背景

  在优达学城看关系数据库的课程,复习一下数据库的知识。发现了两点以前有了解但是没有太注意的地方。

  1. SQL注入攻击
  2. 脚本注入攻击

SQL注入攻击

百度百科 - SQL注入攻击

  SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
  SQL注入攻击属于数据库安全攻击手段之一,可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
  SQL注入攻击会导致的数据库安全风险包括:刷库、拖库、撞库。

在课程中谈到的最基本的一种SQL注入攻击,是利用后端数据库插入命令相关代码的疏忽。

例如:

# python连接mysql

import mysql.connector

DB = mysql.connector.connect(user='XXX',password='pw',database='db',use_unicode=True)
c = DB.cursor()
c.execute("insert into TABLE (column) values ('%s')", content)
DB.commit()
DB.close()

  代码的问题在于,在把用户输入的内容放入数据库的请求语句中时,采用了不安全的方式。这里的 insert 语句,用引号括住需要写入数据库的字符串。当攻击者在输入框中填写 '); delete from TABLE;,那么相当于传入了另一条SQL语句(该语句是清空 TABLE表),并不是单纯的文本值。
  当然,这只是很基本的一个展示,但需要引起关注!

解决方法:

# 使用元组参数来执行调用
c.execute("insert into TABLE (column) values (%s'\)", (content,))

脚本注入攻击

  在网站中,脚本攻击是最常见的一种恶意攻击,即脚本注入(Script Injection),它在通过浏览器使用用户输入框插入恶意标记或脚本代码时发生。一般是指javascript脚本。
  Javascript注入攻击指的是通过在网页地址后加JavaScript代码,影响系统运作。
  JavaScript注入漏洞能发生作用主要依赖两个关键的动作,一个是用户要能从界面中注入JavaScript到系统的内存或者后台存储系统中;二是系统中存在一些UI会展示用户注入的数据。
  属于是一种跨站脚本攻击

在课程中谈到的最基本的一种脚本注入攻击,是利用网站的输入框,填写javascript脚本产生大量垃圾信息(还有一种是,一直弹框令浏览器无法正常使用)。

例如:

// 在网站的输入框输入以下内容
// 该脚本会定时提交垃圾信息

<script>
setTimeout(function() {
    var tt = document.getElementById('content');
    tt.value = "<h2 style='color: #FF6699; font-family: Comic Sans MS'>Spam, spam, spam, spam,<br>Wonderful spam, glorious spam!</h2>";
    tt.form.submit();
}, 2500);
</script>

  代码的问题在于,对于用户输入的内容,没有考虑到这些语句对于网页解析来说是有特殊意义的。一般做法就是将输入的文本,有针对性的进行转换,永远都被当成是文本,而非javascript代码。对于 Python 来说,有一个很好用的库 bleach

解决方法:

# 使用 bleach库 进行文本转换
import bleach

c.execute("insert into TABLE (column) values (%s'\)", (bleach.clean(content),))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值