【零基础入门学习Python---Python中安全编程和测试之快速入门实践】

这篇具有很好参考价值的文章主要介绍了【零基础入门学习Python---Python中安全编程和测试之快速入门实践】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【零基础入门学习Python---Python中安全编程和测试之快速入门实践】,Python,python,学习,安全,pytest,unittest,集成测试,单元测试

🚀 零基础入门学习Python🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 零基础入门学习Python🚀

【零基础入门学习Python---Python中安全编程和测试之快速入门实践】,Python,python,学习,安全,pytest,unittest,集成测试,单元测试

📑 Python安全编程和测试

Python 在网络安全和测试领域有着广泛的应用,如 Web 应用开发,安全测试,ETL 流程,数据分析等,本文将介绍 Python 安全编程和测试的基本原则和技术,以及常见的安全漏洞和攻击方式。

📄 安全编程的基本原则和技术

📜 数据验证

在编写 Python 程序时,保证对输入数据的验证是很重要的。数据验证是指对输入数据的正确性和安全性进行检验,从而防止恶意攻击者利用恶意数据破坏程序。

以下是一些常见的数据验证技术:

  • 输入长度验证。
  • 输入指定字符的验证,如数字,字母和符号。
  • 输入数据的格式验证,如邮箱和手机号码。
  • 预处理用户输入数据,去除不必要的字符和标签。
import re

email_regex = re.compile(r"[^@]+@[^@]+\.[^@]+")

def is_valid_email_address(email):
    """
    校验电子邮件地址。
    """
    if not email:
        return False
    
    return email_regex.match(email) is not None

print(is_valid_email_address("foo@example.com"))
print(is_valid_email_address("bar@test"))

📜 减少代码注入风险

Python 中的执行代码注入风险被广泛利用,例如在处理不能信任的数据时,如网络爬虫、Web 应用程序和数据处理程序。 这些程序需要经常处理动态的输入数据,恶意攻击者可能使用这些数据注入恶意代码。

以下是一些减少代码注入风险的技术:

  • 使用 Python 内置的编码和解码模块进行 URL、XML、JSON 的加解密处理,减少注入攻击的风险。
  • 使用 Paramiko API 网络连接模块,支持 SSH 和 Telnet 协议。
# 使用 XML 模块解析恶意 XML 数据
import xml.etree.ElementTree as ET

def get_element_value(xml_string, element_name):
    """
    获取 XML 元素值。
    """
    root = ET.fromstring(xml_string)
    return root.findtext(element_name)

📜 防止敏感数据泄露

在处理敏感数据时,防止敏感数据泄露是非常重要的,如数据库连接密码、敏感配置文件等。为避免敏感数据泄露,可以使用如下的技术:

  • 在处理敏感数据时,尽量不要使用明文存储,例如使用哈希合适的算法存储密码,保证安全性。
  • 使用环境变量或者配置文件等把敏感数据存储到特定的位置。
  • 对敏感数据进行专门的加密和解密,如 AES,RSA,MD5 等。
import hashlib

def md5_encode(password: str) -> str:
    """
    使用 md5 加密方式对密码进行加密。
    """
    md5 = hashlib.md5()
    md5.update(password.encode("utf-8"))
    return md5.hexdigest()

📄 常见的安全漏洞和攻击方式

了解常用的安全漏洞和攻击方式是非常重要的,以下是一些常见的安全漏洞和攻击方式:

📜 SQL 注入攻击

在 Web 应用程序中 SQL 注入攻击被广泛利用,例如查询恶意语句的内容或者修改数据库等,为避免 SQL 注入攻击,应在构造 SQL 语句时使用预定义查询,或使用数据库的原生语句,防止恶意的 SQL 数据注入。

import sqlite3

def get_user_data(user_id: int):
    """
    从数据库获取用户信息,使用绑定参数方式防止 SQL 注入攻击。
    """
    with sqlite3.connect("example.db") as conn:
        cursor = conn.cursor()
        cursor.execute("SELECT * FROM user WHERE id = ?", (user_id,))
        row = cursor.fetchone()
        if row:
            return {"id": row[0], "username": row[1], "email": row[2]}

print(get_user_data(1))

📜 XSS 跨站脚本攻击

在 Web 应用程序中,XSS 攻击通常利用网页编译程序的漏洞,通过注入恶意脚本来控制用户的浏览器。为避免 XSS 攻击,可以使用框架内置的 XSS 过滤器或编写自己的 XSS 过滤器,对用户的输入进行过滤。

以下是一个示例代码,用于从 HTML 中过滤恶意脚本:

import html

def html_escape(text):
    """
    转义 HTML 中的非法字符,防止 XSR 攻击。
    """
    return html.escape(text)

html = """
<html>
<head>
<title>安全编程的示例代码</title>
</head>
<body>
<script>alert('注入攻击!')</script>
<div>{{ content }}</div>
</body>
</html>
"""

print(html_escape(html))

📄 使用加密和哈希算法保护数据

保护数据的安全性是非常关键的,特别是在处理敏感数据时更是必要的。常用的加密和哈希算法包括 MD5,SHA,AES,RSA 等。

以下是一个使用 AES 加密算法的示例代码,对用户的输入密码进行加密存储和解密:

import base64
import hashlib
from Crypto.Cipher import AES

class AESEncrypt:
    """
    加解密逻辑处理。
    """
    key = hashlib.md5("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".encode("utf-8")).digest()

    def __init__(self):
        self.mode = AES.MODE_CBC
        self.Iv = b'0000000000000000'

    def encrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.Iv)
        length = 16
        count = len(text.encode("utf-8"))
        add = length - (count % length)
        text += (b'\0' * add).decode("utf-8")
        self.ciphertext = cryptor.encrypt(text.encode("utf-8"))
        return base64.b64encode(self.ciphertext)

    def decrypt(self, text):
        cryptor = AES.new(self.key, self.mode, self.Iv)
        plain_text = cryptor.decrypt(base64.b64decode(text))
        return plain_text.rstrip(b'\0').decode("utf-8")

aes = AESEncrypt()

original_password = "123456"
en_password = aes.encrypt(original_password)
print(f"original password: {original_password}")
print(f"encrypted password: {en_password.decode('utf-8')}")

print(f"decrypt password: {aes.decrypt(en_password)}")
assert original_password == aes.decrypt(en_password)

📄 编写安全的 Web 应用和 API

在编写 Web 应用和 API 时,需要遵循以下的安全性原则:

  • 使用 HTTPS 协议,保证连接安全。
  • 应保护用户会话,避免恶意攻击者通过会话劫持窃取会话信息。
  • 认证和授权的原则,确保连目标的 API 和服务只能由授权的用户使用。
  • 数据和交互的验证原则,确保用户输入和应用程序交互的有效性。
  • 监控和日志,对应用程序的运行时行为进行记录。

以下是一个示例代码,用于展示如何使用 Flask 来编写一个基本的 Web 应用和 API:

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/", methods=["GET"])
def home():
    """
    返回 API 首页。
    """
    response = {"message": "欢迎来到 Python 安全编程 API!"}
    return jsonify(response)

@app.route("/login", methods=["POST"])
def login():
    """
    登录接口。
    """
    username = request.form.get("username")
    password = request.form.get("password")
    
    if authenticate(username, password):
        token = generate_token"""
## 编写安全的 Web 应用和 API(续)

以下是一个示例代码,用于展示如何使用 Flask 来编写一个基本的 Web 应用和 API:

```python
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route("/", methods=["GET"])
def home():
    """
    返回 API 首页。
    """
    response = {"message": "欢迎来到 Python 安全编程 API!"}
    return jsonify(response)

@app.route("/login", methods=["POST"])
def login():
    """
    登录接口。
    """
    username = request.form.get("username")
    password = request.form.get("password")

    if authenticate(username, password):
        token = generate_token(username)
        return jsonify({"token": token.decode("utf-8")})

    return jsonify({"error": "用户名或密码错误。"}), 401

@app.route("/profile", methods=["GET"])
@auth_required
def profile():
    """
    用户资料。
    """
    username = request.headers.get("Authorization")
    user = get_user_by_username(username)
    return jsonify({"id": user.id, "username": user.username, "email": user.email})

if __name__ == "__main__":
    app.run()

在上述代码中,我们使用了 Flask 框架来编写一个简单的 API,并实现了登录和用户资料的接口,以及 JWT 认证和授权的功能。为了保护 API 的安全性,我们定义了一个 auth_required 装饰器,用于验证 JWT Token 的有效性,防止非法请求访问接口。

📄 单元测试和集成测试的基本概念

单元测试和集成测试是 Python 安全编程的一个重要方面,其主要目的是为开发人员提供构建可持续性和可测试性应用程序的机制,并帮助他们实现高质量的代码。单元测试是指对应用程序中单独的部分进行测试,而集成测试是指考虑应用程序的整体性,在构建和部署应用程序之前测试整个应用程序。

以下是一些单元测试和集成测试的基本概念:

📜 单元测试

在 Python 中,unittest 模块是用于单元测试的标准库之一,通过使用 TDD(测试驱动开发)的方式为开发人员提供了一个基准测试类和一组断言方法,易于开发者编写简单,可重复的自动化测试。

以下是一个使用 unittest 模块编写的示例测试用例:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        print(s)
        self.assertEqual(s.split(), ['hello', 'world'])

if __name__ == "__main__": 
    t=TestStringMethods()
    t.test_split()


📜 集成测试

在 Python 中,pytest 模块是用于集成测试的标准库之一,可以使用插件和扩展模块扩展其功能。pytest 的功能非常强大,可以测试应用程序中的所有部分,包括数据库和 API。

以下是一个使用 pytest 模块编写的示例测试用例:

import pytest

def test_username():
    username = "john_doe_123"
    assert username.islower()


def test_password():
    password = "password123"
    assert len(password) >= 8

📄 使用 unittest 或 pytest 进行测试

Python 提供了许多单元测试和集成测试的库和框架,例如 unittest 和 pytest 等。

unittest 是 Python 内置的库,可以用于简单而可靠的单元测试,它定义了一组测试框架,支持参数化测试、测试装饰器、断言语句等特性。

以下是一个使用 unittest 编写的示例测试用例:

import unittest

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = 'hello world'
        self.assertEqual(s.split(), ['hello', 'world'])

pytest 是 Python 中一个非常流行的测试框架,支持功能强大、可配置和易于扩展,并且不需要类的继承。

以下是一个使用 pytest 编写的示例测试用例:

import pytest

def test_username():
    username = "john_doe_123"
    assert username.islower()


def test_password():
    password = "password123"
    assert len(password) >= 8

📄 测试驱动开发(TDD)的实践

测试驱动开发(TDD)是一种受欢迎的开发方法,它是一种理想的方式,可以在编写代码之前先编写测试用例,并在完成代码后进行自动化测试,以保证代码的正确性。

使用 TDD 开发 Python 安全编程应用程序时,我们可以遵循以下的流程:

  1. 编写测试用例。
  2. 运行测试用例,检查测试是否失败。
  3. 编写代码,让测试用例通过。
  4. 运行测试用例,检查是否成功通过。

以下是一个使用 TDD 开发的示例代码:

def get_user_data(user_id):
    """
    获取用户数据。
    """
    conn = get_database_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))

    rows = cursor.fetchall()
    if rows:
        return rows[0]

    return None

def test_get_user_data():
    """
    用于测试获取用户数据的函数。
    """
    user_id = 1
    user_data = get_user_data(user_id)
    assert user_data is not None

在上面的示例代码中,我们首先编写一个获取用户数据的函数的测试用例,然后实现这个函数,最后运行测试用例,确保函数的正确性和安全性。

📄 结论

本文介绍了如何在 Python 中进行安全编程和测试,包括数据验证,减少代码注入风险,防止敏感数据泄露,常见的安全漏洞和攻击方式,使用加密和哈希算法保护数据,编写安全的 Web 应用和 API,单元测试和集成测试的基本概念,使用 unittest 或 pytest 进行测试,测试驱动开发(TDD)的实践等方面,并提供了示例代码,帮助开发者更好的理解 Python 安全编程和测试的概念和实践。

💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

【零基础入门学习Python---Python中安全编程和测试之快速入门实践】,Python,python,学习,安全,pytest,unittest,集成测试,单元测试

【零基础入门学习Python---Python中安全编程和测试之快速入门实践】,Python,python,学习,安全,pytest,unittest,集成测试,单元测试文章来源地址https://www.toymoban.com/news/detail-524515.html

到了这里,关于【零基础入门学习Python---Python中安全编程和测试之快速入门实践】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Python编程从入门到实践》学习笔记05If语句

    Audi BMW Subaru Toyota True False False True ‘Audi’ Hold the anchovices! True This is not the correct answer. True False False True True False True False Marie,you can post a response if you wish. you are old enough to vote! you are old enough to vote! Have you registered to vote yet? Sorry,you are too young to vote Please register to vote as soon as you

    2024年02月07日
    浏览(32)
  • 零基础如何学习 Web 安全,如何让普通人快速入门网络安全?

    前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 【一一帮助安全学习(网络安全面试题+学习路线+视频教程+工具)一一】 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多

    2024年02月12日
    浏览(56)
  • 零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

    网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人员,后续法律也会改革,网络安全只会

    2024年04月22日
    浏览(50)
  • python编程从入门到实践(第2版)学习笔记(变量,字符串)

    变量是一种可以赋给值的标签。每一个变量都指向一个相关联的值,下列代码中 message 即为变量,指向的值为“Hello Python world !” 第二行的 print() 函数用于打印输出这个 message 变量所关联的值。 且变量的值是可以修改的,python中只有变量的最新值有效如下列代码。     变量

    2024年02月12日
    浏览(44)
  • 【学习编程】献给迷茫中的你,教你如何快速入门编程,如何从编程小百到 IT 巨佬?零基础自学请收下这份学习指南(经验分享)

    编程初学者可能都思考过这个问题: “我该怎么学编程?我要选择哪门编程语言比较适合我呢? ......” 今天小编教大家认识编程语言,了解编程语言。 我们已经迈进了崭新的2023年,世界已经大范围的电子化、程序化。 未来世界运行规律大量都是有计算机控制,无论大家将

    2023年04月08日
    浏览(40)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—收集信息篇

    目录 前面的话 1、收集域名信息 1.1、Whois查询 ​编辑1.2、备案信息查询  2、收集敏感信息 3、收集子域名信息 3.1、子域名检测工具 3.2、搜索引擎枚举 3.3、第三方聚合应用枚举 3.4、证书透明度公开日志枚举 本章小结 本人喜欢网络完全的一些知识,自学一些。现在写出来和大

    2024年02月08日
    浏览(44)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—渗透中的开发语言

    目录 前面的话 开发语言 1、html 解析 2、JavaScript 用法 3、JAVA   特性 4、PHP 作用 PHP 能做什么? 5、C/C++ 使用 如何学习 关于在渗透中需要学习的语言第一点个人认为就是可以打一下HTML,JS那些基础知识,磨刀不误砍柴工。其次,了解基本的代码后,就可以去学习相关的漏洞知

    2024年02月09日
    浏览(44)
  • 网络安全|渗透测试入门学习,从零基础入门到精通—动态分析技术工具OllyDbg界面介绍

    目录 动态分析技术调试器 什么是OllyDbg OllyDbg能干什么 OllyDbg窗口介绍 1、反汇编面板窗口 2、信息面板窗口 3、数据面板窗口 4、寄存器面板窗口 5、栈面板窗口 动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。用户模式调试器是指用来调试用户模式

    2024年02月11日
    浏览(43)
  • python教程 入门学习笔记 第3天 编程基础常识 代码注释 变量与常量

    编程基础常识 一、注释 1、对代码的说明与解释,它不会被编译执行,也不会显示在编译结果中 2、注释分为:单行注释和多行注释 3、用#号开始,例如:#这是我的第一个python程序 4、注释可以写在单独一行,也可以写在一句代码后面 5、不想执行编译,又不能删除的代码,可

    2024年02月14日
    浏览(41)
  • 使用大模型快速构建测试工具的入门级实践

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)-CSDN博客 文章浏览阅读2.3k次,点赞85次,收藏11次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、app自动化测试、接口

    2024年02月19日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包