博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于web开发中安全的所思所做
阅读量:6892 次
发布时间:2019-06-27

本文共 2571 字,大约阅读时间需要 8 分钟。

hot3.png

搞开发三年了,从一个初级菜鸟到中级菜鸟,虽然还是菜鸟,但在开发中已经有了自己很多的想法。关于web开发安全方面的所思所做跟大家予以分享,吐槽无需等待,即可拍砖,热烈欢迎

项目刚上线,发现就被盯上了,每天有很多莫名其妙的IP在扫描网站,试探着各种漏洞,当然,作为一名还算负责的开发者,立即绷紧了神经,项目紧急更新,一些特定目录的访问绑定了公司IP,实现白名单访问机制,开场完。。正文开始:

1. 禁用 X-Powered-By ,无论PHP,node很多框架都默认开启此参数,这是将所用的服务器框架或开发语言,赤裸裸的告诉不怀好意者呀,例如此网站:


Connection:Keep-AliveContent-Encoding:gzipContent-Type:text/htmlDate:Thu, 22 Jan 2015 08:16:42 GMTKeep-Alive:timeout=1, max=996Server:ApacheTransfer-Encoding:chunkedVary:Host,Accept-EncodingX-Powered-By:PHP/5.3.3
亲@途牛网,赶紧禁用吧,如果PHP 5.3有漏洞,你明白的

2. 用户登录, Google最近实验表明99%的验证码都是可以机器识别的,所以原来那套靠验证码防止机器暴力破解的法子貌似不可行了, 所以我们必须限制密码错误次数,例如5次自动锁定,当天5次自动锁定,特定Ip绑定, 短信验证等等


数据库设计CREATE TABLE users(  id uuid NOT NULL,  username character varying(50), -- 用户名  email character varying(100), -- 邮箱  nick_name character varying(50), -- 昵称  pwd character varying(50), -- 密码  registry_at timestamp without time zone DEFAULT now(), -- 注册时间  registry_ip character varying(20), -- 注册IP  status integer DEFAULT 0, -- 状态 0.未激活 1.正常 -1.禁用  login_fail_times integer DEFAULT 0, -- 登录错误次数  CONSTRAINT users_pkey PRIMARY KEY (id),  CONSTRAINT users_email_key UNIQUE (email),  CONSTRAINT users_username_key UNIQUE (username))//记录每次登陆CREATE TABLE login_log(  id bigserial NOT NULL,  account_id bigint, -- 账号ID  ip character varying(20), -- 登录IP  create_at timestamp without time zone DEFAULT now(), -- 创建时间  channel character varying(20) DEFAULT 'web'::character varying, -- 登录渠道  os character varying(20) DEFAULT 'web'::character varying, -- 系统 android, os, web  success boolean DEFAULT false,  remark text, -- 备注  CONSTRAINT login_log_pkey PRIMARY KEY (id))

3. 网站管理平台,强烈建议通过IP白名单机制来访问网站管理平台,一边面保护自己的网站,另一方面呵护用户的隐私


module.exports = function(req, res, next) {    if (/^\/admin/.test(req.originalUrl)) {        var ip = req.ip,            hostReg = /127\.0\.0\.1/,            wanIpReg = /192\.168\./,            companyIpReg = /110\.110\.110\.110/;        if (!hostReg.test(ip) && !wanIpReg.test(ip) && !companyIpReg.test(ip)) {            console.info(ip+"....reject....");            res.send(401);        } else {            console.info(ip+"....across.....");            next();        }    } else {        next();    }}

4. 记录IP访问日志,如果访问太频繁,如100次每秒,果断加入到黑名单IP中


5. 关于登录页面,加上referer验证,crsf跨域提交验证貌似都没有什么害处


//csrf防护//检查refererfunction checkReferer(req, res, next) {  var referer = req.headers['referer'];  var host = req.host;  if (referer && referer.indexOf(host) !== -1) {    next();  } else {    res.simpleResponse(-403, '/', '/', {errMsg:''}, req);  }}

...

将安全进行到底,欢迎拍砖,在被拍中提高...

转载于:https://my.oschina.net/wanglihui/blog/370670

你可能感兴趣的文章
SVN合代码时遇到的问题
查看>>
tuna.tsinghua yum repo
查看>>
ext store remove old datas load new datas优化
查看>>
【Jetty Server 开发系列之一】搭建Jetty Server环境&&Http客户端实现交互
查看>>
【COCOS2D-HTML5 开发之三】示例项目附源码及运行的GIF效果图
查看>>
mysql5.6的安装(rpm)
查看>>
Gamebryo实例学习之八InputDemo
查看>>
关于CSDN2013博客之星的一些看法
查看>>
"安全删除硬件并弹出媒体"的列表中出现内置硬盘的解决办法.
查看>>
LINUX中JDK环境变量配置
查看>>
linux 切换用户之后变成-bash-3.2$的解决方法
查看>>
我的友情链接
查看>>
使用list
查看>>
Ubuntu 12.04 安装 gcc-4.8 及 gdb 7.6
查看>>
DOM设置表格隔行变色js代码及鼠标悬停在哪行,哪行字体就加粗效果
查看>>
GII 和 DEBUG 模块出现 403 解决
查看>>
shell历史命令记录功能
查看>>
kali linux软件源
查看>>
centos6设置静态IP
查看>>
cocos2d_x在windows环境下的方向键支持
查看>>