常见 Web 安全攻防总结
Web 安全的对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助。今天这边文章主要的内容就是分析几种常见的攻击的类型以及防御的方法。
也许你对所有的安全问题都有一定的认识,但最主要的还是在编码设计的过程中时刻绷紧安全那根弦,需要反复推敲每个实现细节,安全无小事。
本文代码 Demo 都是基于 Node.js 讲解,其他服务端语言同样可以参考。
XSS
首先说下最常见的 XSS 漏洞,XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以只能叫 XSS。
XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。XSS 的攻击方式千变万化,但还是可以大致细分为几种类型。
非持久型 XSS
非持久型 XSS 漏洞,也叫反射型 XSS 漏洞,一般是通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行。
天下无难试之Redis面试刁难大全
Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难。作为一名在互联网技术行业打击过成百上千名【请允许我夸张一下】的资深技术面试官,看过了无数落寞的身影失望的离开,略感愧疚,故献上此文,希望各位读者以后面试势如破竹,永无失败!
Redis有哪些数据结构?
字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。
如果你是Redis中高级用户,还需要加上下面几种数据结构HyperLogLog、Geo、Pub/Sub。
如果你说还玩过Redis Module,像BloomFilter,RedisSearch,Redis-ML,面试官得眼睛就开始发亮了。
使用过Redis分布式锁么,它是什么回事?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。
这时候对方会告诉你说你回答得不错,然后接着问如果在setnx之后执行expire之前进程意外crash或者要重启维护了,那会怎么样?
这时候你要给予惊讶的反馈:唉,是喔,这个锁就永远得不到释放了。紧接着你需要抓一抓自己得脑袋,故作思考片刻,好像接下来的结果是你主动思考出来的,然后回答:我记得set指令有非常复杂的参数,这个应该是可以同时把setnx和expire合成一条指令来用的!对方这时会显露笑容,心里开始默念:摁,这小子还不错。
那些实用的Nginx规则
1. 概述
大家都知道Nginx有很多功能模块,比如反向代理、缓存等,这篇文章总结下我们这些年实际环境中那些有用的Nginx规则和模块,大部分是用法的概括及介绍,具体细节在实际配置时再自行google。
2. 内置语法
先介绍Nginx默认已支持的内置功能,靠这些基本就满足大部分的web服务需求。
2.1 proxy代理
proxy常用于两类应用场景,一类是中转,如异地科学的上网方式,另外一类是到后端服务的负载均衡方案。
用反向代理时候,需要特别注意里面的域名默认是在nginx启动时候就解析了,除非reload否则一直用的是当初解析的域名,也就是说不能动态解析。
但这个问题是可以通过别的模块或者用内置字典变量方式来解决。
500 internal server error
今天同事在使用开发服管理平台上传图片的时候服务器返回:500 internal server error/nginx让我帮忙看下什么原因造成的
浏览器返回错误信息的时候抛出nginx,于是我登录服务器查看nginx的错误日志信息,发下如下信息
2017/12/01 10:47:49 [crit] 12775#0: *18 open() "/var/lib/nginx/tmp/client_body/0000000003" failed (13: Permission denied)
可以看到提示/var/lib/nginx/权限不足
可以通过以下命令查看权限信息
ls -la /var/lib/nginx
drwx------ 3 nginx nginx 4096 Sep 18 17:20 nginx
标签: linux error nginx server crit
从苦逼到牛逼,详解Linux运维工程师的打怪升级之路
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化。如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火)
之前写过运维基础篇,发现对很多人收益挺大,接下来也写下关于这4年多的运维实践经验,从事了2年多游戏运维,1年多安全运维,1年大数据运维,相关行业信息不能算非常精通,但是熟悉和熟练还是相对可以的。
linux运维人员常用工具拓扑详见:
标签: linux rsync sed awk python
给shell脚本加锁
在内部测试服务器上,有一个shell脚本用于将csv数据表格转换成Python数据文件。在执行过程中的某一步,由于需要对一些文件进行写操作,所以如果同时有两个人运行了导表程序,则第二个人运行到此步骤时,就会失败并退出,这既拖慢了第一个人的导表速度,而且对第二人的体验也不好(运行了五分钟然后告诉我失败了?黑人问号……)。所以我就想给这个shell脚本加个锁,保证同一时刻只能有一个实例在运行,并及早给出其他用户提示信息。土办法
最开始想到的是一个土办法:每次shell开始运行,就检测某个特定的“锁文件”是否存在,如果不存在就touch一个;如果存在,则输出错误信息,提示用户稍后重试。
LOCKFILE=/home/xxq/lock_update_check_commit_sh.tmp if [ -e $LOCKFILE ] then echo "Another user is doing the same thing, please wait!" exit 1 else touch $LOCKFILE chmod 600 $LOCKFILE fi
维护了这么久的服务器,你真的认识 Web 缓存体系?
1、认识Web缓存知识体系
1.1从HTTP请求说起
我们从一个Http的请求开始,先介绍下环境,左边是我们的用户端浏览器,右边是我们的Web服务器,当然Web服务器后面整体架构就不说了。
- 第一步,当用户浏览器发出一个请求,这个请求会经过网络到达Web服务器。这句话说明了当一个数据包从用户端发送到Web服务器端,这个时间是时网络延迟时间。
- 第二步,Web服务器处理请求,并响应数据。如果是动态请求我需要查缓存,查数据库,最终把请求返回给浏览器,这个时间是响应时间。
- 第三步,响应数据从Web服务器发送给用户端,这又是网络传输时间。
- 第四步,用户浏览器接收数据,本地计算和渲染。这个时间就是计算和渲染的时间,你的JS脚本不一样,渲染时间也是不一样的,但是这个时间是比较小的。
linux php 安装xdebug扩展
# 1. Xdebug 简介# Xdebug 是一个开放源代码的 PHP 程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。当前最新版本为 Xdebug 2.6.0。
# 2. Xdebug 相关资料
# 官网:https://xdebug.org
# 官网文档:https://xdebug.org/docs
通过pecl安装xdebug扩展
php环境:PHP 7.0.24
系统环境:CentOS Linux release 7.4.1708 (Core)
#install xdebug 以下使用pecl安装php扩展,pecl安装传送门
pecl install xdebug
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
Warning: Invalid argument supplied for foreach() in Command.php on line 249
Warning: Invalid argument supplied for foreach() in /usr/share/pear/PEAR/Command.php on line 249
MyISAM几个容易忽视的配置选项
MyISAM在读操作占主导的情况下是很高效的。可一旦出现大量的读写并发,同InnoDB相比,MyISAM的效率就会直线下降,而且,MyISAM和InnoDB的数据存储方式也有显著不同:通常,在MyISAM里,新数据会被附加到数据文件的结尾,可如果时常做一些 UPDATE,DELETE操作之后,数据文件就不再是连续的,形象一点来说,就是数据文件里出现了很多洞洞,此时再插入新数据时,按缺省设置会先看这些洞洞的大小是否可以容纳下新数据,如果可以,则直接把新数据保存到洞洞里,反之,则把新数据保存到数据文件的结尾。之所以这样做是为了减少数据文件的大小,降低文件碎片的产生。但InnoDB里则不是这样,在InnoDB里,由于主键是cluster的,所以,数据文件始终是按照主键排序的,如果使用自增ID做主键,则新数据始终是位于数据文件的结尾。了解了这些基础知识,下面说说MyISAM几个容易忽视的配置选项:
concurrent_insert:
通常来说,在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert的设置,MyISAM是可以并行处理查询和插入的:
Mac pip install protobuf 安装失败
Installing collected packages: six, protobufFound existing installation: six 1.4.1
DEPRECATION: Uninstalling a distutils installed project (six) has been deprecated and will be removed in a future version. This is due to the fact that uninstalling a distutils project will only partially uninstall the project.
Uninstalling six-1.4.1:
Exception:
Traceback (most recent call last):
File "/Users/xiaodu/Library/Python/2.7/lib/python/site-packages/pip/basecommand.py", line 215, in main
status = self.run(options, args)
File "/Users/xiaodu/Library/Python/2.7/lib/python/site-packages/pip/commands/install.py", line 342, in run
prefix=options.prefix_path,
File "/Users/xiaodu/Library/Python/2.7/lib/python/site-packages/pip/req/req_set.py", line 778, in install
requirement.uninstall(auto_confirm=True)
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(19)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(73)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)
最新日志
- 成为架构师,如何真正具备“系统思维”?
- DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议
- 从技术专家到战略领袖:成就技术总监的路径与思维
- python 如何读取超大的文件
- python requests 模块
- 如何给自己充电?
- 告别2024,迎接2025:深耕梦想,向前而行
- linux 的 dns 缓存,NSCD 服务
- The following untracked working tree files would be overwritten by checkout
- insecure connection not allowed,产生原因及如何解决