1、XSS攻击
它允许恶意web用户将代码植入到提供给其它用户使用的页面中。其实在web前端方面,可以简单的理解为一种javascript代码注入,如果你的用户名称里面含有script标签的话,就可以执行其中的代码了。
还可以使用ajax,将其他用户在当前域名下的cookie获取并发送到自己的服务器上。这样就可以获取他人信息了。再在各个QQ群中,散播自己的空间,引诱别人来访问。就可以拿到用户在这个域名下的cookie或者其他隐私了。
如何防范?
最简单的办法防治办法,还是将前端输出数据都进行转义最为稳妥。
比如图片显示不出来会执行onerror,可以从这里面注入从而中毒,解决办法一样的,也可以转义:
<img src="<?php echo htmlentities($imgsrc);?>" />
保护好你的cookie
我们的敏感信息都是存储在cookie中的(不要把用户机密信息放在网页中),想要阻止黑客通过js访问到cookie中的用户敏感信息。那么请使用cookie的HttpOnly属性,加上了这个属性的cookie字段,js是无法进行读写的。php的设置方法如下:
<?php
setcookie("userpass", "doctorhou-shuai", NULL, NULL, NULL, NULL, TRUE);
?>
2 、CSRF攻击
我们日常的开发,还是要遵循提交业务,严格按照post请求去做的。把一些应当提交的数据,做成get请求。殊不知,这不仅仅是违反了http的标准而已,也同样会被黑客所利用。更不要使用jsonp去做提交型的接口,这样非常的危险。
3、 网络劫持攻击
如果你的网站还没有进行https加密的化,则在表单提交部分,最好进行非对称加密--即客户端加密,只有服务端能解开。这样中间的劫持者便无法获取加密内容的真实信息了。
4、 控制台注入代码
不知道各位看官有没有注意到天猫官网控制台的警告信息,这是为什么呢?因为有的黑客会诱骗用户去往控制台里面粘贴东西(欺负小白用户不懂代码),比如可以在朋友圈贴个什么文章,说:"只要访问天猫,按下F12并且粘贴以下内容,则可以获得xx元礼品"之类的,那么有的用户真的会去操作,并且自己隐私被暴露了也不知道。
二、防止攻击的措施总结
- 对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。
验证用户输入的数据,包括值、类型、范围等等,用验证控件进行验证 RequiredFieldValidator RangeValidator RegularExpressionValidator
这些检查或过滤必须在服务器端客户端都进行。客户端服务端都要进行验证,客户端为了提高用户体验,服务端才可以有效防止威胁
2)不要使用管理员权限的数据库连接,不要使用动态拼接sql
3)机密信息加密,不能使用明文
4)每个页面加载时,对用户合法性进行判断。
5)登录后session中的敏感信息需要加密,避免在永久cookies中存储敏感信息,重要的cookie标记为http only
6)发送敏感信息时使用SSL、POST方式,尽量使用新型web HSTS安全协议
7)不要直接抛出异常的详细信息给用户,异常返回友好的页面,防止用户看到敏感信息
8)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。
9)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。
10)关闭windows的8.3格式功能。DOS系统下的命令方式为8.3格式,即文件名不超过8个字符,扩展名不超过3个字符。形如:???.exe 。 现在Windows系统文件名长度最长可达255个字符了。
11)限制敏感页面或目录的访问权限。
12)项目发布前使用使用漏洞扫描软件,如IBM appScan,UnisWebScanner,对安全性进行评估。
另外,哪些操作会造成内存泄漏?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。
setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)