Web App安全入门

摘要:
什么是WebApp?WebApp是在网络和标准浏览器上运行的应用程序,基于网页技术开发,以实现特定功能。“client.sendclient.sendif__name__==”__main__“:ip_port=sock=socket.socket.bindsock.listenwhileTrue:conn,addr=sock.accept()handleRequestconn.close()我们可以请求当地的8000港口并正常返回。返回的内容如下:b'GET/HTTP/1.1主机:127.0.0.1:8000用户代理:Mozilla/5.0Gecko/010010Firefox/78.0接受:text/html,application/xhtml+xml,application/xml;q=0.9,图像/webp,*/*;q=0.8接受语言:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2接受编码:gzip,deflateDNT:1连接:保持活动升级不安全请求:1'b'GET/favicon.icoHTTP/1.1主机:127.0.0.1:8000User-Agent:Mozilla/5.0Gecko/20100101Firefox/78.0接受:image/webp,*/*接受语言:zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;Q=0.2接受编码:gzip,deflateDNT:1连接:保持活力“什么是web框架?web应用程序框架是支持动态网站、web应用程序和web服务开发的开发框架。有两种类型的框架:基于请求的框架和基于组件的框架。我们构建并解释了基于Django的web框架。Django是一个开源的web应用程序框架。

Web App是什么

Web App 是运行与网络和标准浏览器上,基于网页技术开发实现特定功能的应用。

前端:HTML CSS JavaScript

后端:Java Python PHP

数据库:Mysql Oracle

容器:IIS,Apache Nginx

协议:TCP DNS HTTP HTTPS

访问过程如图:

Web App安全入门第1张

简单的web应用代码

import socket

def handleRequest(client):
    buf = client.recv(2048)
    print(buf)
    msg = "HTTP/1.1 200 OK

"
    msg1 = "Hello World!"
    client.send(('%s' % msg).encode())
    client.send(('%s' % msg1).encode())

if __name__ == "__main__":
    ip_port = ('0.0.0.0', 8000)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(ip_port)
    sock.listen(5)

    while True:
        conn, addr = sock.accept()
        handleRequest(conn)
        conn.close()

我们请求一下本地的8000端口,是可以正常返回的。返回内容如下:

b'GET / HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1

'
b'GET /favicon.ico HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: image/webp,*/*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

'

什么是web框架

web应用框架是一种开发框架,用来支持动态网站、网络应用程序及网络服务的开发,其类型有基于请求的和基于组件的两种框架。

有助于网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口,标准样板和会话管理等,可提升代码的可在用性。

我们基于Django进行搭建和讲解web框架

Django是一个开源的web应用框架。由Python编写。

 1.安装Django

pip install django

2.创建项目

django-admin startproject mysite

3.讲解目录结构

Web App安全入门第2张

  •  manage.py  是Django管理本地项目的命令行工具
  • __init__.py 是一个普通的包初始化模块
  • setting.py 是项目的配置文件,例如数据库配置、时间、语言等
  • urls.py 是用户网址到代码的映射关系
  • wsgi.py 接口信息用于服务器部署

4.运行

python manage.py runserver 0.0.0.0:8001

Web App安全入门第3张

 5.创建app

django-admin startapp firstapp

Web App安全入门第4张

 6.修改配置文件

修改mysite/setting.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'firstapp',
]

把firstapp添加到INSTALLED_APPS,使得能够索引到我们的应用

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

修改TEMPLATES 使得能够访问到我们的前端页面文件

ALLOWED_HOSTS = ['[::1]']

修改ALLOWED_HOSTS使得其他外部IP访问

7.添加执行层代码

修改firstapp/views.py

from django.shortcuts import render

# Create your views here.
def firsthtml(request):
    #渲染页面,并呈现给用户
    return render(request,'index.html')

功能是直接渲染并返回静态文件

修改mysite/urls.py

from firstapp import views

urlpatterns = [
    path(r'^admin/', admin.site.urls),
    path(r'^helloworld', views.firsthtml),
]

使访问地址直接连接到执行代码

创建模板文件

在项目根目录下创建templates目录,并创建一个index.html文件,内容为hello

 Web App安全入门第5张

 8.初始化数据库,并创建超级管理员

python manage.py makemigrations
python manage.py migrate

创建管理员账号

python manage.py createsuperuser

Web App安全入门第6张

 协议基础

HTTP协议怎么工作

HTTP协议定义 了WEB客户端如何从Web服务端请求Web页面,以为Web服务端如何把页面传给服务端。

  • 客户端连接Web服务器
    • 一个HTTP客户端,通常为浏览器,与Web服务器的HTTP端口(通常80)建立一个TCP套接字连接
  • 发送HTTP请求
    • 通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头、空行和请求数据4部分组成
  • 服务器接收请求并返回HTTP响应
    • Web服务器解析请求,定位请求资源,服务器将资源副本写到TCP套接字中,由客户端读取。一个响应头由状态行,响应头、空行(请求空行)和响应数据(请求体)4部分组成
  • 释放TCP连接
    • 若connection模式为close,则服务端主动关闭TCP连接,客户端被动关闭连接,释放TCP连接。
    • 若connection模式为keepalive,则连接会保持一段时间,该时间内可以继续接受请求。
  • 浏览器解析HTML内容

HTTP请求方法和响应代码

HTTP请求方法
方法说明支持的HTTP协议版本
GET获取资源1.0、1.1
POST传输实体主体1.0、1.1
PUT传输文件1.0、1.1
HEAD获取报文头部1.0、1.1
DELETE删除文件1.0、1.1
OPTIONS询问支持的方法1.1
TRACE追踪路径1.1
CONNECT要求用隧道协议连接代理1.1
LINK建立和资源之间的联系1.0
UNLINK断开连接关系1.0
响应代码说明
状态码类别原因短语
1XXInformational(信息性状态码)接受的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error()服务器处理请求错误

WEB安全的起源

Web应用全都是建立在HTTP协议基础上的,是对HTTP协议的实际应用。

Web应用在实现HTTP协议的过程中,没有做足够充足强大的约束,导致攻击者能够利用其中的薄弱环节进行攻击

 Web渗透工具介绍

1、BURPSUITE

BurpSuite是用于攻击Web应用程序的集成平台框架。它包含很多Web安全相关工具,也同时设计了接口、满足了安全人员自行扩展程序功能的需求。

功能:

  • Proxy:是一个拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向的原始数据流
  • Intruder: 是一个定制的高度可配置的工具,对web程序进行自动化攻击。如:枚举标识符,收集有用的数据,以及使用fuzzing技术探测常规漏洞
  • Repeater: 是一个靠手动操作来补发单独的HTTP请求,并分析应用程序响应的工具
  • Sequencer: 是一个用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具
  • Decoder: 是一个进行手动执行或对应用程序数据者只能解码编码的工具
  • Comparer: 是一个实用的工具,通常是通过一些相关请求和响应得到两个数据的一个可视化“差异”

2、curl

一个功能强大灵活的网络工具,使用url的形式传输数据,支持HTTPS,IMAP,POP3,RTSP,SCP,FTP,TFTP,SMTP等协议。

多用于抓取网页、网络监控等方面,解决开发及调试中的问题

Web App安全入门第7张

 查看同信过程

curl -v www.baidu.com

3、Postman

Postman 是一款功能强大的网页调试与发送网页HTTP请求的工具

不仅可以调试简单的CSS/HTML/脚本等简单的网页信息,它几乎可以发送所有类型的HTTP请求

4、Hackbar

Firefox浏览器插件,包含一些常用的工具(SQL injection,XSS,加密)可以利用它快速构建一个HTTP请求,或者用它快速实现某种算法,多用于手工测试Web漏洞。

5、Wappalyzer

是一款分析网站所用的技术栈的插件,火狐浏览器附件搜索即可安装

Web App安全入门第8张

免责声明:文章转载自《Web App安全入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何使用 Secret?- 每天5分钟玩转 Docker 容器技术(108)学习迭代器实现C#异步编程——仿async/await(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

APP 安全测试点概述

一、安装包测试 1.1 关于反编译   目的是为了保护公司的知识产权和安全方面的考虑等,一些程序开发人员会在源码中硬编码一些敏感信息,如密码。而且若程序内部一些设计欠佳的逻辑,也可能隐含漏洞,一旦源码泄漏,安全隐患巨大。   为了避免这些问题,除了代码审核外,通常开发的做法是对代码进行混淆,混淆后源代码通过反软件生成的源代码是很难读懂的,测试中,我们可以...

Rails的静态资源管理(二)—— 如何使用 Asset Pipeline

官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.html 在 Rails 的早期版本中,所有静态资源文件都放在 public 文件夹的子文件夹中,例如 images、javascripts 和 stylesh...

《软件构架实践》阅读笔记1

《软件构架实践》阅读笔记01 今天我开始阅读《软件构架实践》这本书,这也是我们下学期的一门学位课,所以我不敢懈怠,从头开始读这本书。在我的原来的思想中,软件构架应该就是在编写软件之前,先要以画图或者文档的方式,对要编写的软件进行一个大体构架的描述,然后根据这个构架去编写软件,今天读这本书,让我对软件的构架有了新的认识。 记得老师曾经说过,我们这一个专业不缺...

Linux新建用户并赋予文件读写权限

Linux命令 新建用户,并赋予文件夹权限 groupadd mvn #添加一个用户组 useradd -r -g mvn -s /bin/false mvn #添加一个用户 passwd mvn #修改mvn用户的密码 cd /usr/local/tomcat/apache-tomcat-7.0.54/webapps #...

Debian9.5 VNC Server远程桌面配置

VNC概述VNC (Virtual Network Console)是虚拟网络控制台的缩写。VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 或 MAC中的任何远程控制软件媲美。在 Linux...

JAVA文件中获取路径及WEB应用程序获取路径方法

[From] http://blog.sina.com.cn/u/2374247923 1. 基本概念的理解 绝对路径:你应用上的文件或目录在硬盘上真正的路径,如:URL、物理路径 例如: c:/xyz/test.txt代表了test.txt文件的绝对路径; http://www.sun.com/index.htm也代表了一个URL绝对路径; 相对路径...