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 网页验证码
另外,为了区分用户是计算机还是全自动程序,通过网页验证码来防止恶意破解密码,刷票,论坛灌水等.
网页验证码能有效防止黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试.
|