对于 DNS(Domain Name System) 大家肯定不陌生,不就是用来将一个网站的域名转换为对应的IP吗。当我们发现可以上QQ但不能浏览网页时,我们会想到可能是域名服务器挂掉了;当我们用别人提供的hosts文件浏览到一个“不存在”的网页时,我们会了解到域名解析系统的脆弱。然而关于DNS还有一大堆故事值得我们去倾听,去思考。DNS 源起要想访问网络上的一台计算机,我们必须要知道它的IP地址,但是这些地址(比如243.185.187.39)只是一串数字,没有规律,因此我们很难记住。并且如果一台计算机变更IP后,它必须通知所有的人。显然,直接使用IP地址是一个愚蠢的方案。于是人们想出了一个替代的方法,即为每一台计算机起一个名字,然后建立计算机名字到地址的一个映射关系。我们访问计算机的名字,剩下的名字到地址的转换过程则由计算机自动完成。hosts映射早期,名字到地址的转换过程十分简单。每台计算机保存一个hosts文件,里面列出所有计算机名字和对应的IP地址,然后定期从一个维护此文件的站点更新里面的记录。当我们访问某个计算机名字时,先在hosts文件找到对应的IP,然后就可以建立连接。...
 发布日期: 2017-03-01    分类: 其他    浏览量: 1440   0条评论  
之前不一小心把Ubuntu16.10所有软件的apt-get配置给删了,然后就把系统给重新装了一遍。想一下以后如果要再次重装系统的话,配置服务器这些有点繁琐,然后就想了下,web服务都用docker来运行。docker基础用法,看起来还挺简单的,但是在我实际的使用中,按照自己的想法去部署服务的时候还是遇到了一些书上没说的细节问题。这些细节问题,进行不下去时候,那么我先去搜索,搜索不到再去发帖,这样有时候会在一个小点上面卡主好几天。看到这里,我当然都把这些问题一一解决了。我这里的架构是Nginx+MySQL+PHP的。一开始我是想用Dockerfile文件,把它们三个全都放到一个镜像里面取,一开始的Dockerfile内容如下:FROM ubuntu:latest RUN apt-get update RUN apt-get install -y mysql-server nginx php-fpm php-mcrypt EXPOSE 80 443 CMD ["/etc/init.d/nginx", "start"]当我build的时候,遇到的第一个问题就是,安装MySQL的时候,会弹出...
 发布日期: 2017-01-21    分类: 其他    浏览量: 4061   0条评论  
小计一笔,这里仅限是环境搭建的过程。搭了个LNMP的环境,估计很多同学最常遇到的就是502了吧?我搭了那么多次,就是502最多。我遇到的一般都出在用户的设置和目录权限的配置上面的,解决这两点一般就不会有什么问题了。配置nginx,新建了个用户组web,和用户webuser。改配置nginx.conf的user选项为user webuser。执行nginx -t报错:nginx: [emerg] getgrnam("webuser") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed这什么意思啊?一番搜索之后好像没什么有用信息。原来是user www-data,而且系统里面有www-data组和www-data用户。所用猜测报错应该是说用户有问题。nginx检查配置正确性的时候肯定是按照同用户名的组去验证用户的,这里我只写了user webuser。webuser组下面确实没有webuser用户,改成user webuser web一切ok。nginx...
 发布日期: 2016-07-16    分类: 其他    浏览量: 1414   0条评论  
这服务器过期好久了,去后台看了,套餐都不见了,网站竟然还在,还能访问,惊讶。难道是忘记清理了?哈。。。还是去买了个vps来搞搞,之前用的是虚拟主机。昨晚去linode买了个最低配置的主机,新加坡节点,今天起来就搭了个环境,把网站运行起来了。感觉速度还可以啊!嘿嘿!...
 发布日期: 2016-07-16    分类: 其他    浏览量: 1255   0条评论  
1、验证码验证码被认为是对抗CSRF攻击最简洁而有效的防御方法CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。而验证码,则强制用户必须与应用交互,才能完成最终请求。因此,在通常情况下,验证码能够很好地遏制CSRF攻击。通常我们不可能在所有地方都加上验证码,所有这个也只能作为一种辅助手段。2、Referer Check就是检查请求的来源,这个还可以用来做图片的防盗链。Referer是由浏览器通过HTTP头来发送的。但是,这个头也不是什么时候都有的,很多情况下都是没有的,还可以通过程序来自定义。这个也只能作为一个辅助手段。3、Anti CSRF Token防御CSRF的主要方法是使用一个Token。CSRF的本质原因就是重要操作的所有参数都能被攻击者猜测到。攻击者只有预测出一个URL的所有参数与参数值,才能成功构造出一个伪造的请求,反之,攻击者无法攻击成功。因此我们可以在每个请求上面新家一个token参数,这个token是随机的,不可预测的,并且只有用户和服务器知晓,不能被第三方获取。提交请求时,服务器只需验证请求中的token是否存在及合法就可以了。Token的几个使用原则...
 发布日期: 2015-07-28    分类: 其他    浏览量: 1356   0条评论  
1、HttpOnlyHttpOnly最早由微软提出,并在IE6中实现,至今已经逐渐成为一个标准。浏览器将禁止页面的javascript访问带有HttpOnly属性的Cookie。严格来说,HttpOnly并非为了对抗XSS,HttpOnly解决的是XSS后的Cookie劫持攻击。PHP设置带HttpOnly属性Cookie的方法是使用自带的setcookie函数:setcookie('PHPSESSID', '79ce945e3bfd1917919e63a7ddbfe385', null, null, null, null, true);最后一个参数是设置httponly属性,执行后服务器会发送如下设置cookie的头:Set-Cookie:PHPSESSID=79ce945e3bfd1917919e63a7ddbfe385; path=/; HttpOnly2、输入检查常见的Web漏洞如XSS、SQL注入等,都要求攻击这构造一些特殊字符,这些特殊字符可能是正常用户不会用到的,所有输入检查就有存在的必要了。输入检查,在很多时候也被用于格式检查。例如网站注册使用的用户名,会被要求只能用字...
 发布日期: 2015-07-27    分类: 其他    浏览量: 1332   0条评论  
CORS全称是Cross-Origin Resource Sharing(跨域资源共享),是W3C推荐的跨域请求方案。同时也需要服务器端程序的配合。作用主要是以下这些跨站http请求:1、跨域的AJAX请求。2、网络字体(Web Font),就是css里面 @font-face定义的字体,可以在服务器端配置哪些域允许跨站载入这些TrueType字体。3、WebGL的纹理(texture)文件。4、用HTML5的drawImage函数画到canvas里面的图片。场景示例简单的请求一个简单的跨域请求像下面描述的那样:1、只使用了GET, HEAD 或者POST。假如POST用来向服务器发送数据的话,HTTP头的Content-Type字段值是application/x-www-form-urlencoded, multipart/form-data,或者text/plain三个中的一个。2、没有设置自定义的HTTP头,就是哪种以X-开头的,比如X-Modified。例如域http://localhost的需要请求http://www.example.com的内容 :我们可以很容易的在本地通...
 发布日期: 2015-04-23    分类: 其他    浏览量: 3906   0条评论  
1、hhostnamelookups off域名查找:这增加了处理每个请求的开销,首先,服务器会对dns系统做一个反向查询以找出客户系统的主机名,然后又进行正向查询看获得的主机名是否真实指向客户的ip。大多数情况下,你可以简单的关闭这个功能,如果你经常处理服务器日志,这个工作完全可以在以后进行。你可以通过在设置文件中加入指示hostnamelookups off来关闭这个功能。2、options -followsymlinks符号连接:当打开这个选项时,apache将检查每个请求中是否包含对符号连接的引用,这将对请求中包含的每个路径调用一次lstat()系统调用。除非你准备使用符号连接,否则用 options -followsymlinks 来关掉它。3、sethandler server-status服务器状态信息,默认已经关闭。该模块尽管这对测试与监控服务器很有用,但它也为服务器带来了额外的开销,你可以通过寻找任何类似sethandler server-status的指示来关闭,如果可能,你可以在安装apache时移除这个模块。4、options -indexes关闭目录浏览。5、...
 发布日期: 2015-04-13    分类: 其他    浏览量: 1158   0条评论  
闲来无事,把git的基本用法来一遍。配置git,有提供一个git config的命令来做。git的配置文件存放在三个地方:  1、/etc/gitconfig:对所有用户都适用的配置。用git config配置时加上--system参数就是读写的这个文件。  2、~/.gitconfig:只适用于这个用户的配置。git config加上参数--global参数配置它。  3、项目中的.git/config:只对当前项目有效。Windows系统,在用户主目录里面有个.gitconfig文件。置配用户信息就是配置用户名和电子邮件,每次git提交时都会引用这两条信息,说明是谁提交了更新。配置命令如下:git config --global user.name "test" git config --global user.email "test.qq.com"如果去掉--global参数就是配置当前项目的.git/config文件。配置默认文本编辑器默认是调用系统的默认编辑器git config --global core.editor vim配置差异分析工具git config --glo...
 发布日期: 2015-03-18    分类: 其他    浏览量: 1103   0条评论  
REST和认证 我们在设计REST(Representational State Transfer)风格的Web service API,有一个问题经常要考虑,就是如何设计用户认证的体系(Authentication). 比较传统的做法是首先有一个登陆的API,然后服务器返回一个session ID,后续的操作客户端都必须带上这个session ID,但是这样的,服务就变成了有状态了,不符合REST风格的原则。另外,由于负载均衡的存在,必须有公共存储来保存用户的Session,这也增加了系统的复杂度。 所以比较好的做法是每次都传递认证信息,这样系统就是无状态的,当然由于每次都需要认证,必然降低了一些效率,必要的时候要考虑缓存用户信息在服务器端。 有几点要注意: 1、密码不能传播 一个比较低级的错误是通讯时,由客户端传递用户名和密码到服务器端认证,这样很容易被黑客攻击造成密码泄露。 标准的做法是使用HMAC(Hash-based Message Authentication Code),想法就是不传播password,而传播content和password的混合hash值。我们来看看Am...
 发布日期: 2015-02-27    分类: 其他    浏览量: 1241   0条评论