安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段
Posted Benjamincsdn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段相关的知识,希望对你有一定的参考价值。
文章目录
2、“/test”路由访问功能,最简单实现get、post响应示例
前言
安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。
为什么自己没有找到漏洞,哪么可能存在漏洞场景是?
攻击流程和常见应用防火墙处理流程
JS注入
简称:JS注入攻击,特殊符号注入,代码注入等
XSS 攻击即跨站点脚本攻击(Cross Site Script),指黑客通过篡改网页,注入恶意 javascript脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
常见的 XSS 攻击类型有两种:
一种是反射型,攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。
“杀马特”、“烙鸡鸭” 3G时代利用浏览器自身特性自动化预加载 “下一页” 插入恶意链接无意间被迫主访问xxx网站……
“这是最好的时代,这是最坏的时代”
另外一种 XSS 攻击是持久型 XSS 攻击,黑客提交含有恶意脚本的请求,保存在被攻击的 Web 站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击的目的。
恶意弹窗
恶意请求
SQL注入
攻击者在 HTTP 请求中注入恶意 SQL 命令(drop table users;),服务器用请求参数构造数据库 SQL 命令时,恶意 SQL 被一起构造,并在数据库中执行。
常见危害
1、删库
2、越权访问数据,恶意增改数据
HTTP协议
HTTP(S)是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,,现在大多数访问都使用了HTTPS协议,而HTTPS的默认端口为443。
HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的 操作方式
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法
GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
web应用接口场景实现分析
项目背景
Python Web.Py框架开发WEB问答平台,该项目支持登陆注册、发布帖子、帖子分页、评论叠楼和统计相关功能,后台统计等功能。
项目地址
GitHub - Github-Benjamin/Question-Answer: Python Web.Py开发WEB问答平台
针对分析
4.论坛发帖功能,对用户提交的数据实现字符过滤替换操作,防JS命令注入,遗留SQL注入漏洞
web.py框架实现说明
1、url路由实现
# -*- coding:utf-8 -*-
# /**
# * Created by Benjamin on 2017/9/7
# */
import web
from model.model import *
urls = (
'/', 'Main',
'/login','Login',
'/logout','Logout',
'/user/(\\d+)','User',
'/title/(\\d+)','Title',
'/titled','Titled',
'/huifu/(\\d+)','Huifu',
'/tubiao','Tubiao',
'/about','About',
'/test','test'
)
render = web.template.render("templates")
# 此处省略具体方法实现
# ……
if __name__ == "__main__":
web.config.debug = False
web.config.session_parameters['timeout'] = 10*60
app = web.application(urls, globals())
app.notfound = notfound
app.internalerror = internalerror
db = web.database(dbn='mysql', host='127.0.0.1', port=3306, user='root', pw='', db='question', charset='utf8')
session = web.session.Session(app, web.session.DiskStore('sessions'), initializer='username': None)
app.run()
2、“/test”路由访问功能,最简单实现get、post响应示例
代码
class test(object):
def GET(self):
return "Hello Benjamin!"
def POST(self):
return "Hello Benjamin!"
本地调试访问地址
浏览器访问截图
3、“/test”接口分析说明
该路由方法实现最简单的响应返回,无任何逻辑判断和参数获取判断处理,则针对该接口分析几乎不可能存在JS和SQL注入漏洞。
“做的越多即可能错的越多”
“什么都没做,什么也没做,那么就没有任何问题吗?”
4、可能存在js或sql注入场景说明
场景说明
一切与数据交互(增删改查)的地方均可能存在问题,列举如下场景分析
用户提交问题
用户场景截图
讲解网站年久失修,找一个现维护的网站图代替.png
提交评论接口
# 用户提交问题
class Put(object):
def POST(self):
username = session.username
if username:
data = web.input()
title = data.get('title')
content = data.get('content')
if (title and content):
data = Puts(title,content,username)
if data:
raise web.seeother('/question/%s' % data[0].get('id'))
else:
return render.public(render.head(username), '<h3>服务器异常,提交问题失败</h3>')
else:
return render.public(render.head(username), '<h3>问题或描述为空,请重新输入数据</h3>')
else:
raise web.seeother('/')
sql执行
# 用户提交问题
def Puts(title,content,username):
times = str(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
# 字符处理防止JS注入
content = content.replace('<', '<').replace('>', '>').replace('\\r', '<br>').replace(' ', ' ').replace(' ', ' ').replace("'", "'").replace('"', '"')
sql = "insert into question(id,title,content,fbtime,click,keywords,username) values(NULL,'%s','%s','%s',%s,'%s','%s')" % (title, content, time.strftime('%Y-%m-%d'), 1, username, username)
SelectMysql(sql)
sql = "SELECT * FROM question WHERE title = '%s' and username = '%s' ORDER BY id DESC LIMIT 1"%(title,username)
data = SelectMysql(sql)
return data
5、存在js或sql注入场景分析
一切与数据交互(增删改查)的地方均可能存在问题,上述步骤4中针对可能存在的js和sql注入字符串做了替换处理,防止低级的js和sql注入,解决常规数据安全的问题,以维护系统的安全稳定性。
6、存在js或sql注入场景 防范
SQL注入关键字漏洞定义,防范替换字符串表
SQL注入攻击字符串 | replace替换字符串 |
= | = |
> | > |
< | < |
@ | @ |
' | ' |
" | " |
( | ( |
) | ) |
JS注入关键字漏洞定义,防范替换字符串表
XSS攻击字符 | replace替换字符 |
= | = |
: | : |
- | - |
( | ( |
) | ) |
< | < |
> | > |
! | ! |
[ | [ |
] | ] |
. | . |
@ | @ |
结束语
没有绝对安全的系统
以上是关于安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段的主要内容,如果未能解决你的问题,请参考以下文章