简单记录web安全
上个月大概一个月做了给简单得web安全,比较局限,因为大部分是行内项目,不是互联网的项目
用户名密码自动填充autocomplete
取消自动填充,登录页输入框加属性autocomplete =false
用户名密码暴力破解
限制用户名的密码的错误次数,超过三次输入错误,锁定用户。
验证码(图形/短信)暴力攻击
限制用户每分钟验证码请求次数
header特殊字符
比如header中换行符,request.getHeader。
csrf(跨站点请求伪造)
表单token防重复提交(一次提交失效)
refer(token校验)和host
host只允许已经允许得host进入本系统访问,浮动ip配置多个。
注意(已被坑),比如你的请求是http://127.0.0.1,但是修改http的host为www.baidu.com,后台获取得request得getrequestUrl得值,www.baidu.com/test/…
refer就是此页面得来源,比如A-》B,B请求得refer就是A,正常限制本系统内跳转,校验refer同源,可能会有一些浮动ip,或者移动端和pc端交互或者iam的,可以单独设置配置已认证资源放过请求.
安全头
Strict-Transport-Security
Content-Security-Policy
X-Content-Type-Options:nosniff (script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应)
X-Frame-Options:阻止点击挟持攻击:SAMEORIGIN(同源才加载),DENY依赖
X-XSS-Protection:1; mode=block
IE的行为受X-Content-Type-Options的影响,如果Web应用没有返回Content-Type,
那么IE9、IE11将拒绝加载相关资源。如果服务器发送响应头 “X-Content-Type-Options: nosniff”,则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应。
这是一种安全功能,有助于防止基于 MIME 类型混淆的攻击。
"application/ecmascript"
"application/javascript"
"application/x-javascript"
"text/ecmascript"
"text/javascript"
"text/jscript"
"text/x-javascript"
"text/vbs"
"text/vbscript"
xss(跨站脚本js,css,shell,vb等)
输入可以显示在页面上对本来得html造型影响的一种攻击方式。
可以以来js脚本,比如alert等,也可以依赖css比如修改样式等
- 反射型,直接在html中输入可执行脚本,比如input输入半个引号,即可完成vakue=“”,然后绑定js事件,alert等
- 存储型,从数据库中获取得数据(可执行js等)在html数据展示是,返回到html执行或者篡改html,
- dom型
解决方案:
1.前端输入校验,比如禁止单引号双引号,可执行js或者css,style等
2.用户输入信息过滤:(存储型)query参数(get方法)/post的请求体参数:
可以使用filter对参数进行过滤,对入库和出库数据进行过滤,用正在表达式匹配掉,并replace掉非法字符,正则可以写成properties配置文件,方便读取和增加。
比如:ript>可以绕过一次匹配,),onclick,onmouseover,on开头的所有js事件,window.location,alert,express,eval,frame=,window.onload ,等等,不可能完全防住,因为有n中攻击方式
状态码泄露
比如403,泄露有资源但是没有访问权限
转状态码 500-》200,host、referer不通过给404状态码,
定义错误页面404或者error.html等,不能泄露状态码
clickJacking(点击劫持)
比如在html页面上增加隐藏得frame,或者按钮同一个位置,加隐藏得按钮,发送请求到其他得地址。
method类型白名单
只允许get和post请求,禁止options探测,options探测会泄露信息
sql注入(盲注)
恶意sql在数据进行增删改查到拼接到sql时,执行恶意代码;
可以用xss过滤得时候,过滤sql特殊字符,比如删表的,select的等sql关键字进行过滤。
比如,‘and ’1‘=’1‘(很经典,select * from user where name = ‘user1’ and ‘1’=‘2’;恒成立,可以绕过密码等),增加order by 11等
session会话未更新
登陆前和登陆后session做一个失效,然后new一个新的。
cookie
设置httponly(禁止js获取cookie敏感信息)和secure安全
上传攻击
限制上传得(真实)后缀(有的字符会使后缀失效),必要可以做内容检测,当可指定文件上传到服务器后执行文件中代码。
url中特殊字符
http://www.baidu.com/sss/ddd;ddddd=ffff? 分号会引起url截断,不是url内合法字符
参数污染
比如/test/nnn?name=aaa&name=bbb&name=ccc可能引起数据错了
参数移除
比如id是int类型,给字符串,如果没有校验直接int parseInt就会程序错误
或者length 超长等。
解决方法:
规范校验
边界检查(范围限制,长度限制)
类型检查等
唯一性登陆,单客服端登陆(一个ip只能一个用户同使登陆)
版本(服务器)泄露 jquery等引用得js,http会泄露版本信息,部分jquery版本有安全问题。 异常后泄露得nginx版本信息, 以及http头得server信息等
ip,邮箱等泄露
第一次写,有问题欢迎指出,