|
Web中常见的安全问题有
1 SQL注入
- 原理:就是通过把
SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令 - 防御:
- 对用户的输入进行校验,如通过正则表达式进行限制;
- 避免动态拼装
SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取; - 避免使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接;
- 避免把机密信息明文存放;
2 XSS
XSS即跨域脚本攻击(cross-site scripting),是一种网站应用程式的安全漏洞攻击,是代码注入的一种.
-
原理: 不需要做任何登录认证,攻击者通过合法的操作(如在url或评论框中输入),往web页面插入恶意的html标签或JavaScript代码.例如
<div>{{name}}</div>
攻击者可能可以通过改变url将html修改为 <div><script>alert(1)</script></div>
这样页面就凭空多出一段可执行脚本. -
防御:
-
encode:最普遍的做法是转义输入输出的内容,对于引号,尖括号,斜杠等进行转义 function escape(str) {
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/"/g, "&quto;");
str = str.replace(/'/g, "&##39;");
str = str.replace(/`/g, "&##96;");
str = str.replace(/\//g, "&##x2F;");
return str
}
如果是富文本,就设置白名单. -
过滤: 移除用户输入的和事件相关的属性.如onerror可以自动触发攻击,还有onclick等. 移除用户输入的style,script,iframe节点,尤其是script节点,它是支持跨域的,一定要移除. (总而言之,过滤掉一些不安全的内容)
3 CSRF
CSRF即跨站请求伪造(cross-site request forgery)
XSS和CSRF的区别
区别一:
XSS不需要登录CSRF需要用户先登录网站A,获取cookie
区别二:
XSS是向网站A注入JS代码并执行,篡改网站A的内容CSRF是利用网站A本身的漏洞,去请求网站A的接口
4 点击劫持
5 网页验证码
另外,为了区分用户是计算机还是全自动程序,通过网页验证码来防止恶意破解密码,刷票,论坛灌水等.
网页验证码能有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试.
|