这个东西主要是从攻防世界web组学到的知识。Reverse方向太难了,现在基本处于放弃状态,大概就有时间做做web组的题涨涨见识了。还有一部分是搭网站中途学到的或问到的。
以下的介绍部分通常摘自百度百科或维基百科。
Robots协议
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。当一个搜索引擎爬虫访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索引擎爬虫就会按照该文件中的内容来确定访问的范围;如果该文件不存在,那么搜索引擎爬虫就沿着链接抓取。
使用该协议,需要在根目录下放置robots.txt文件,用于告诉爬虫哪些可爬取哪些不可爬取。文件里设置规则:
User-agent: *
Disallow: /local
Disallow: /none/a.html
以上规则,为禁止所有用户代理(也包括爬虫)在/local目录下搜索和不搜索/none目录下的a.html页面。一个User-agent下可以有多条Disallow,文件中可以有多个User-agent(每个之间需要空格一行)。
User-agent为爬虫采用的名字,请参阅https://www.cnblogs.com/zrmw/p/9332801.html
注1:这个协议并不是完全可靠的,爬虫有可能不遵守该规则。因此可以算是一个君子协议,不是一个完全通用的规范。
注2:检索采用对相对url进行字符串匹配的规则,因此url末尾有’/‘和无’/‘是不一样的。
Sitemap 网站地图
Sitemap可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页。最简单的 Sitemap 形式,就是XML 文件,在其中列出网站中的网址以及关于每个网址的其他元数据(上次更新的时间、更改的频率以及相对于网站上其他网址的重要程度为何等),以便搜索引擎可以更加智能地抓取网站。Sitemap.xml放在网站根目录下。网上有很多sitemap生成工具。
在国内,网站的流量很大一部分都来自百度搜索引擎,但是百度已经不支持sitemap了,因此一般最好也生成一个baidusitemap.xml文件,然后在https://ziyuan.baidu.com/ 提交网页。在上方的用户中心->站点管理里添加网页。需要验证是自己的。
提交网页后,可以再提交baidusitemap,在https://ziyuan.baidu.com/linksubmit/index收录。
(Point provided by MarioZZJ)
Cookie
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。当客户机再次访问这个 Web 文档时这些信息可供该文档使用。
cookie储存在document.cookie,想要查看网页Cookie可以F12调出开发人员选项,点击控制台(Console),输入命令:
console.log(document.cookie);
禁用Cookie:一般浏览器的设置/Internet选项中可以设置禁止使用cookie。如谷歌浏览器在这:
不过注意,部分网站退出后重新进入短时间内不需要重新登录的机制也是基于cookie,因此关闭后可能会有些麻烦。
cookie的数据保存于浏览器,而session的数据保存于服务器(可存于redis),浏览器只保存session的ID。
网页传参数
GET方式:可以有简单方式,如果是php页面,在浏览器显示的页面的url上以?变量名1=值1&变量名2=值2…的方式传值。
比如说使用360搜索”传值”,页面url上会发现q=”传值”
实际上是它的服务器代码进行了赋值。也可以手动赋值。
php中 == 和 === 比较是不同的,前者只进行值比较。如判断a==0,若a是无法转成数字的字符串,那么会转成0导致结果相等。这类情况会导致安全隐患。
POST方法传值就不能直接传了。但可以使用Burpsuite等工具,可以用浏览器的插件,也可以使用curl生成。而POST是可能会改变网站状态的,虽然通常情况下在一个没有设置处理POST提交的页面,POST提交没有任何作用。但是如果系统被侵入过,攻击者在页面中悄悄留下一句代码:
<?php
@eval($_POST['hello']);
?>
这是php中最经典和简单的后门代码,eval接收到的字符串如果可执行会自动执行,这个执行是可以执行主机代码的。比如攻击者在POST请求的正文中写入:
hello=system(“rm -rf *”);
东西都要删没。菜刀工具在有后门的情况下也能直接连接主机。
虽然代码审计工具能检测出大部分后门,但是道高一尺魔高一丈,这句话都能成为后门:
<?php $_GET[a]($_GET[b]);?>
而GET一般会被认为是安全的。因此光靠检测不现实,根本杜绝方法还是得设置安全组策略防止被侵入、进行严格权限分配(入侵了也没权限)、及时查看和备份服务器日志。
题外话:我之前以为限制同一IP的登陆失败次数就能阻止主机密码被破,结果后来发现别说IP代理池技术了,光Burpsuite就能做到随机ip多次碰撞。现在的一整套防护策略真的是经验之谈,少了一步就能有漏洞钻。
页面重定向
如果用户访问一个页面,如果不打算展示这个页面而是打算跳转到另一个页面,可以进行页面重定向。
Web服务器对GET请求的响应报文中设置Location字段可进行重定向,如“Location: index.html”,那么浏览器解析时将自动进入index.html页面,不设置则默认解析GET请求的页面。可以通过服务器设置实现,此时采用3xx的状态码,如301(永久移动)、302 (临时移动)。
此外也可以js实现:
setTimeout("javascript:location.href='index.html'", 300); //300毫秒后跳到index.html页面。
html中的重定向方式为使用meta标签:
< meta http-equiv="refresh" content="1;url=index.html">//一秒后跳转到index.html页面
如果有任何有错误或不够清晰的表达,欢迎邮件至 passacaglia@88.com,谢谢!