陆英
随着互联网的普及,网络安全变得越来越重要,程序员需要掌握最基本的Web安全防范,下面列举一些常见的安全漏洞和对应的防御措施。
跨站脚本(XSS)漏洞
1. XSS简介
XSS是一种经常出现在Web应用中的计算机安全漏洞,也是Web中最主流的攻击方式。
XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,添加一些代码,嵌入到Web页面,使别的用户访问都会执行相应的嵌入代码。
2. XSS的危害
盗取用户资料,比如:登录帐号、网银帐号等;
利用用户身份,读取、篡改、添加和删除数据等;
盗窃重要的具有商业价值的资料;
非法转账;
强制发送电子邮件;
网站挂马;
控制受害者机器向其他网站发起攻击。
3.防止XSS的解决方案
XSS的根源主要是没完全过滤客户端提交的数据,所以重点是要过滤用户提交的信息。将重要的cookie标记为http only,js中的document.cookie语句就不能获取到cookie。
只允许用户输入我们期望的数据。例如:年龄只允许用户输入数字,而数字之外的字符都过滤掉。
对数据进行HtmlEncode处理:用户数据提交时进行HTML编码,将相应的符号转换为实体名称再进行下一步处理。
过滤或移除特殊的Html标签。
过滤js事件的标签。例如“onclick=”,“onfocus”等。
跨站点请求伪造(CSRF)
1. CSRF简介
CSRF也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
XSS主要利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求,利用受信任的网站。与XSS攻击相比,CSRF更具危险性。
2. CSRF的危害
CSRF主要的危害来自于攻击者盗用用户身份,发送恶意请求。比如:模拟用户发送邮件、消息以及支付和转账等。
3.防止CSRF的解决方案
重要数据交互采用POST进行接收,用POST也不是万能的,伪造一个form表单即可破解。
使用驗证码,只要涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。
验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。
也可为每个表单添加令牌token并验证。
SQL注入漏洞
1 . SQL简介
SQL注入是比较常见的网络攻击方式之一,主要是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,实现无帐号登录,甚至篡改数据库。
2. SQL的危害
数据库信息泄漏:数据库中存放的用户隐私信息泄露;
网页篡改:
通过操作数据库对特定网页进行篡改;
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改;
服务器被远程控制,被安装后门;
删除和修改数据库表信息。
3. SQL注入的方式
表单提交:主要是POST请求,也包括GET请求;
URL参数提交:主要为GET请求参数,Cookie参数提交;
HTTP请求头部一些可修改的值,比如Referer和User_ Agent等。
4.防止SQL的解决方案
对用户的输入进行校验,使用正则表达式过滤传入的参数;使用参数化语句,不要拼接sql,也可以使用安全的存储过程;不要使用管理员权限的数据库连接,为每个应用使用权限有限的数据库连接;检查数据存储类型;重要信息一定要加密。
分布式拒绝服务(DDoS)攻击
1. DoS攻击和DDoS简介
DDoS是攻击者通过控制在网络上的傀儡主机,同时发动他们向目标主机进行拒绝服务攻击的方式称DDoS攻击。
2. DDoS的危害
造成客户业务不可用、利益受损;
客户网内一个业务受到攻击,客户联网全面受阻,所有业务瘫痪,连锁反应严重;
引发政治影响、社会舆论的压力给企业带来名誉损失。
3.如何防御DDoS攻击
及时更新系统补丁;安装查杀软硬件,及时更新病毒库;设置复杂口令,减低系统被控制的可能性;关闭不必要的端口与服务;经常检测网络的脆弱性,发现问题及时修复。
对于重要的Web服务器建立多个镜像实现负载均衡,在一定程度上减轻DDoS的危害。
总之,既要做好过滤与编码并使用参数化语句,也要把重要的信息进行加密处理,这样SQL注入漏洞才能得到更好的解决。