• 基于Web安全的Python编程(1)


    目录

    一、http协议基础知识介绍

    1、http协议分类

    2、请求方法

    3、什么是URL

    4、请求头

    5、响应状态码

    二、常用Python库、函数、操作

    三、http常用请求方法

    1、不带参请求

    2、带参数请求(get和post存在细微区别)

    四、http响应属性获取

    1、获取状态码

    2、获取响应文本

    3、获取响应头和请求头

    4、获取请求url和cookie

    5、修改请求头


    一、http协议基础知识介绍

    1、http协议分类

    http 1.0   一次一个连接;http 1.1 多次可以一个连接(都是明文传输,不安全,默认都在80端口)

    https (加密传输,更安全,默认在443端口)

    2、请求方法

    http 1.0:get,post,head

    http 1.1:支持文件上传与删除等更多的方法(put,delete,trace,patch)

    3、什么是URL

    url:协议://主机名.域名/文件夹/文件?参数=值

    比如:https://www.baidu.com/xxx/xx?id=1

    4、请求头

    user-agent:浏览器版本信息

    accept-encoding:浏览器接受的编码

    referer:当前网页从哪里跳转过来的

    cookie:cookie信息

    location:跳转到哪里

    set-cookie:设置cookie信息(响应头)

    www-Authenticate:用于身份验证(http basic等)

    5、响应状态码

    1xx:信息提示

    2xx:成功

    3xx:重定向

    4xx:客户端错误

    5xx:服务端错误

    二、常用Python库、函数、操作

    1、必须装的一个库:requests

    使用前需要先导入该库:import requests

    2、常用函数

    str():将结果转为字符串

    strip():去除空行

    print():输出

    3、常用操作

    选中 ctrl+/:多行注释

    使用+:连接字符串

    三、http常用请求方法

    1、不带参请求

    这个比较简单,直接调用get或者post函数传入url即可

    用法:

    1. requests.get(url)
    2. requests.post(url)

    定义一个变量r,用来接收我们的请求

    使用 r.url 可以获取请求的url(这个我们后面会细讲)

    以get为例,测试代码:

    1. import requests
    2. url = "https://www.baidu.com"
    3. r = requests.get(url)
    4. print(r.url)

    运行结果: 

     

    2、带参数请求(get和post存在细微区别)

    用法:

    1. requests.get(url,params={"key1":"value1","key2":"value2",...}) #get方式请求
    2. requests.get(url,data={"key1":"value1","key2":"value2",...}) #post方式请求

    这里要注意下:除了传入url,还需要传入params或者data,传入的参数名和值使用大括号包裹;

    参数名与值之间使用冒号,每组参数间使用逗号分割;

    参数名和值都需要用单引号或者双引号引起来。(Python中单引号和双引号效果相同)

    为了方便,我们一般会定义一个payload,然后再将这个payload传给params

    这里找了个网站给大家演示一下:

    抓包之后发现是post请求

    测试代码:

    1. import requests
    2. url = "http://node4.anna.nssctf.cn:28150/admin.php?m=user&f=login"
    3. payload = {"account":"admin","password":"900af8acf068e543e2f3f406d5407043"}
    4. r = requests.get(url,data=payload)
    5. print(r.url)
    6. print(r.status_code)
    7. print(r.text)

    其中的密码传入后会进行编码,这里直接传入编码后的内容

    三个print函数,分别输出请求的url,响应状态码,网页源代码(在后面会细讲)

    运行结果:

    四、http响应属性获取

    1、获取状态码

    用法:

    r.status_code

    测试代码: 

    1. import requests
    2. url1 = "https://www.baidu.com"
    3. r1 = requests.get(url1)
    4. print(r1.status_code)
    5. url2 = "https://baidu.com/vavgaeg"
    6. r2 = requests.get(url2)
    7. print(r2.status_code)

    运行结果: 

    访问存在的页面,返回状态吗:200

    访问不存在的页面,返回状态码:404 

    2、获取响应文本

    用法:

    1. r.content #返回二进制数据
    2. r.text #返回源代码

    测试代码:

    1. import requests
    2. url = "https://www.baidu.com"
    3. r = requests.get(url)
    4. print(r.content)
    5. print("*"*60) #用于分割输出结果
    6. print(r.text)

    运行结果:

    可以看到上半部分是网页的二进制数据,下半部分是网页的源代码

    3、获取响应头和请求头

    用法:

    1. r.headers #获取响应头
    2. r.request.headers #获取请求头

     测试代码:

    1. import requests
    2. url = "https://www.baidu.com"
    3. r = requests.get(url)
    4. print(r.headers) #获取响应头
    5. print("*"*160)
    6. print(r.request.headers) #获取请求头

    运行结果:

    可以看到上半部分是响应头,下半部分是请求头

    4、获取请求url和cookie

    用法:

    1. r.url #获取请求url
    2. r.cookies #获取cookie

    测试代码:

    1. import requests
    2. url = "https://www.baidu.com"
    3. r = requests.get(url)
    4. print(r.url)
    5. print("*"*100)
    6. print(r.cookies)

    运行结果:

    可以看到上半部分是我们请求的url,下半部分是cookie的相关信息

    5、修改请求头

    用法:

    headers={"User-Agent":"XXX"} #XXX为我们想要设置的内容
    

    测试代码:

    1. import requests
    2. url = "https://www.baidu.com"
    3. r=requests.get(url)
    4. print(r.request.headers)
    5. headers={"User-Agent":"kali_Myon"}
    6. r=requests.get(url,headers=headers)
    7. print(r.request.headers)

    运行结果:

    这里分别输出了修改前和修改后的请求头 

    后续会继续更新Python在Web安全领域的编程,以及关于常见web扫描工具的脚本编写

    创作不易,喜欢的可以点赞关注支持一下,我是Myon,我们下期再见!

  • 相关阅读:
    如何借助数据集更好的评估NLP模型的性能?
    C++ primer plus第十五章编程练习答案
    Jmeter--简单的快捷键设置
    “高级小程序开发指南“
    linux统计程序耗时和最大内存消耗
    #循循渐进学51单片机#IIC总线与EEPROM#not.13
    使用Tornado进行网络异步编程
    2022/7/30 考试总结
    差分(前缀和的逆运算)
    【三维目标检测】PointRCNN(一)
  • 原文地址:https://blog.csdn.net/Myon5/article/details/133151342