• HTTP通信安全和Web攻击技术


    一、HTTPS,确保Web安全

    在HTTP协议中可能存在信息窃听或身份伪装等安全问题,HTTP的不足:

    通信使用明文(不加密),内容可能会被窃听
     不验证通信方的身份,因此有可能遭遇伪装
    无法证明报文的完整性,所以有可能已遭篡改

      1、通信使用明文可能会被窃听

        HTTP本身不具有加密的功能,HTTP报文使用明文方式发送。另外TCP/IP协议的的通信机制,通信内容在所有的通信线路上都有可能遭到窥视。即使已经过加密

        处理的通信,也会被窥视到通信内容。窃听相同段上的通信并非难事,只需要收集在互联网上流动的数据包(帧)就行了。

        方案:加密处理防止被窃听

          (1)、通信的加密(建立安全通信线路)

            HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用加密HTTP的通信内容。

            用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)

          (2)、内容的加密

            由于HTTP协议没有加密机制,那就对HTTP协议传输的内容本身加密。即把HTTP报文里所含的内容进行加密处理。在这种情况下,客户端需要对HTTP报文主体(body)进行加密处理后再发送请求。

      2、不验证通信方的身份就可能遭遇伪装

        HTTP协议中的请求和响应不会对通信方进行确认。也就是说存在服务器是否就是请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端等类似问题。

        (1)、任何人都可以发起请求

          在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求。另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(也仅

          限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。因为不确认通信方,会存在以下各种隐患:

    无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器
    无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端
    无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限
    无法判定请求是来自何方、出自谁手
    即使是无意义的请求也会照单全收。无法阻止海量请求下的Dos攻击(Denial of Service,拒绝服务攻击)

        (2)、查明对手的证书

          虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。SSL不仅提供加密处理,而且还使用了一种被称为证书的手段可用于确定方。证书由值得信任

          的第三方机构颁发,用以证明服务器和客户端是实际存在的符合资格的。

      3、无法证明报文完整性,可能已遭篡改

        (1)、接收到的内容可能有误

          由于HTTP无法证明报文的完整性,因此,在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。即没有办法确认发出的请求/响应和接收到的请求/响应是前后相同的。

          像这样,请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM),攻击人会随意篡改请求和响应,而让客户端与服务器之间的通信看上去仍旧是正常的。

        (2)、如何防止篡改

          虽然有使用HTTP协议确定报文完整性的方法,但事实上并不便捷、可靠、其中常用的MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。

          如提供下载服务的Web网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值。供用户检查验证下载的文件

          是否就是原来服务器上的文件。可惜的是用这些方法也依然无法百分百保证确认结果正确,因为PGP和MD5本身被改写的话,用户是没有办法意识到的。所以

          有必要使用HTTPS,SSL提供认证和加密处理及摘要功能。

      HTTP+加密+认证+完整性保护=HTTPS

        证书可证明服务器或客户端的身份,如我们会在Web登录和结算等使用HTTPS通信,使用HTTPS通信时,使用https://。

        1、HTTPS是身披SSL外壳的HTTP

         HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。通常HTTP直接和TCP通信,当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。所以说HTTPS是身披SSL外壳的HTTP。

        SSL是独立于HTTP的协议,所以其他运行在应用层的协议如SMTP、Telnet均可配合SSL协议使用。可以说SSL是当今世界上应用最为广泛的网络安全技术。

       2、相互交换密钥的公开密钥加密技术

        SSL采用一种叫做公开密钥加密的加密处理方式。

        (1)、对称密钥加密方式需要将密钥发给对方,但是发送密钥的通信可能被监听使攻击人获取到密钥,另外还得想办法安全的保管接收到的密钥

        (2)、使用两把密钥的公开密钥加密(非对称密钥加密),很好的解决了对称密钥加密的困难。双方各有一套配对的公钥和私钥,加密时双方交换公钥;公钥加密,私钥解密;私钥加签,公钥验签。

        (3)、HTTPS采用混合加密方式:即对称密钥加密和非对称密钥加密两者并用的混合加密机制。由于非对称加密和对称加密相比,其处理速度要慢。对称加密速度较快但是密钥不能安全传输。

          所以充分两者各自的优势,在对称加密的交换密钥环节使用非对称加密方式保证密钥的安全传输,在通信交换报文阶段则使用对称加密的方式。

       3、证明非对称加密方式公钥正确性的证书

        遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥。如准备和某台服务器建立非对称加密方式下的通

       信时,交换公钥后如何证明收到的公开密钥就是原本预想的那台服务器的公钥,可能在公钥传输途中,真正的公钥已经被攻击者替换掉了。

        数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。数字证书认证流程:

          (1)、服务器把自己的公开密钥登录至数字证书认证机构

          (2)、数字证书认证机构用自己的私钥向服务器的公钥签署数字签名并颁发公钥证书给客户端

          (3)、客户端拿到服务器的公钥证书后,使用数字证书认证机构的公开密钥(事先植入到浏览器中),像数字证书认证机构验证公钥证书上的数字签名,以确认服务器的公开密钥的真实性

          (4)、客户端使用服务器的公开密钥对报文加密后发送

          (5)、服务器用私有密钥对报文解密。

        即数字证书认证机构使用非对称加密方式对同样使用非对称加密的双方的交换公钥的公钥进行加密和加签保证公钥的正确性,只不过数字证书认证机构的公钥事先植入在浏览器中,是可信的。

      既然HTTPS安全可靠,为什么不一直使用HTTPS?

     HTTPS比HTTP要慢2到100倍,比HTTP多了SSL通信,首先SSL通信慢,另外SSL通信还要大量消耗CPU及内存等资源。此外要进行HTTPS通信,证书必不可少,而证书必须向认证机构(CA)购买,价格昂贵。

     因此,如果是非敏感信息则使用HTTP通信,只有包含敏感数据时,才使用HTTPS加密通信。

    二、用户身份的认证

      某些Web页面只想让特定的人浏览,所以需要认证功能。认证即确定访问者的身份,以及访问者是否有权限等,核对只有登录者本人才知道的信息,包括:

        密码、动态令牌(仅本人持有的设备内显示的一次性密码)、数字证书(仅限本人终端持有的信息)、生物认证(指纹和虹膜等)、IC卡。

      1、HTTP常用的认证方式:

        BASIC认证(基本认证)、DIGEST认证(摘要认证)、SSL客户端认证、FormBase认证(基于表单认证)。

        认证多半基于表单认证,由于使用上的便利性和安全性问题,HTTP协议标准提供的BASIC认证和DIGEST认证几乎不怎么使用。另外,SSL客户端虽然具有高度的

        安全等级,但因为导入和维持费用等问题,还尚未普及。

          BASIC认证步骤:

    1、发送请求
    2、返回状态码401告知客户端需要进行认证
    3、用户ID和密码以Base64方式编码后发送
    4、认证成功返回状态码200,若认证失败返回状态码401

          基于表单认证:

            基于表单的认证方法并不是在HTTP协议中定义的。客户端会向服务端上的Web应用程序发送登录信息,按登陆信息的验证结果认证。

      2、Session管理及Cookie应用

        基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session。因为HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来。即无法实现状态管理,因此

      即使当该用户下一次继续访问,也无法区分他与其他的用户。于是我们使用Cookie来管理Session(保存SessionID),以弥补HTTP协议中不存在的状态管理功能。然而,如果SessionID被第

      三方盗走,对方就可以伪装成你的身份进行恶意操作了,因此必须防止SessionID被盗,因此SessionID应使用难以推测的字符串,且服务端也要进行有效期的管理,保证其安全性。另外,为

      减轻跨站脚本攻击Xss造成的损失,建议事先在Cookie上加上httponly属性。

        另外,不仅基于表单认证的登陆信息及认证过程都无标准化的方法,服务器端应如何保存用户提交的密码等登陆信息等也没有标准化。通常,一种安全的保存方法是,先利用给密码加盐

      (salt,由服务器随机生成的一个字符串,但是要保证长度足够长,并且是真正随机生成的),然后把它和密码字符串相连接(前后都可以)生成散列值。这样,即使当两个用户使用了同一个

        密码时,由于随机生成的salt值不同,对应的散列值也将是不同的。这样一来,很大程度上减少了密码特性,攻击者也很难利用自己手中的二密码特征库进行破解。

    三、Web的攻击技术

      互联网上的攻击大都将Web站点作为目标,协议本身几乎不会称为攻击的对象,应用HTTP协议的服务端和客户端,以及运行在服务器上的Web因公等资源才是攻击目标。

      统计显示互联网上重要的攻击事件中SQL注入攻击占4成,其次是XSS,占到15%。

      1、HTTP不具备必要的安全 功能

        现今几乎所有的Web网站都会使用会话(session)管理、加密处理等安全性方面的功能,而HTTP协议内并不具备这些功能。从整体上看,HTTP就是一个通用的单纯协议机制

      ,因此它具备较多优势,但是在安全性方面则呈劣势。

      2、在客户端即可篡改请求

        在Web应用中,从浏览器那接收到的HTTP请求的全部内容,都可以在客户端自由地变更,篡改。所以,Web应用可能会接收到与预期数据不相同的内容。

        在HTTP请求报文内加载攻击代码,就能发起对Web应用的攻击。通过URL查询字段或表单、HTTP头部、Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,

      那内部信息就会遭到窃取,或被攻击者拿到管理权限。

      3、针对Web应用的攻击模式

        主要有主动攻击和被动攻击两种。

        1、以服务器为目标的主动攻击

          主动攻击(active attack)是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要访问到

        那些资源。主动攻击模式里最具代表性的是SQL注入和OS命令注入攻击。

        2、以服务器为目标的被动攻击

          被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。

          被动攻击通常的攻击模式如下所示:

          步骤1:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求

          步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱

          步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码

          步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态找那个的用户权限遭恶意滥用等后果。

         被动攻击模式中具有代表性的攻击是跨站脚本攻击(XSS)和跨站点请求伪造(CSRF)。

         利用用户的身份攻击企业内部网络:利用被动攻击,可发起对原本从互联网上无法直接访问的企业内网等网络的攻击。只要用户踏入攻击者预先设好的陷阱,在用户能够

        访问到的网络范围内,即使是企业内网也同样会受到攻击。

     因输出值转义不完全引发的安全漏洞

        实施Web应用的安全对策可大致分为一下两部分

        1)客户端的验证

        2)Web服务器的验证

          (1)、输入值验证

          (2)、输出值转义 

        多数情况下采用JavaScript在客户端验证数据。可是在客户端允许篡改数据或关闭JavaScript,不适合将JavaScript验证作为安全的防范对策。保留客户端验证只是为了尽

      早的辨别错误,起到UI体验同时减轻服务器压力的作用。

        Web应用端的输入值验证按Web应用内的处理则有可能被误认为是具有攻击性意义的代码。针对输入值验证通常是指检查是否是符合系统业务逻辑的数据或检查字符编码等预防对策。

        从数据库或文件系统、HTML、邮件等输出Web应用处理的数据之际,针对输出做值转义处理是一项至关重要的安全策略。当输出值转义不完全时,会因触发攻击者传入的攻击代码,而给输出对象带来损害。

      1、跨站脚本攻击(XSS)

        跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的

      HTML部分有可能隐藏着安全漏洞,就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

        跨站脚本攻击有可能造成以下影响:

          (1)、利用虚假输入表单骗取用户个人信息

          (2)、利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求

          (3)、显示伪造的文章或图片

        跨站脚本攻击案例:

         (1)、在动态生成HTML处发生

          如:在表单上输入内容的时候使用HTML标签括起来,使显示的内容样式改变

          在URI的参数值上使用JavaScript脚本,导致用户在登录时同时发送用户名密码到攻击者的网站,或者导致alter弹出框

         (2)、对用户Cookie的窃取攻击

          同样在URI的参数上指定一个远程的script脚本,通过该脚本窃取用户的Cookie信息。

      2、SQL注入攻击

        SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄漏。

        SQL注入攻击有可能会造成以下等影响:

        (1)、非法查看或篡改数据库内的数据

        (2)、规避认证

        (3)、执行和数据库服务器业务关联的程序等

        SQL注入攻击案例

          在表单上输入查询的条件去查询特定的结果,如果没有使用预编译SQL语句(#{}),而是使用占位符(${})来获取查询条件的话就有可能导致SQL注入。

          如:攻击者在表单上输入的条件为[xxx or 1=1]就能规避掉查询条件查看到非法的数据。或者输入[xxx ---],也会导致之后的查询条件失效。

      3、OS命令注入攻击

        OS命令注入攻击(OS Command Injection)是指通过Web因公,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就存在被攻击的风险。

        可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行非法的OS命令,从而执行OS上安装着的各种程序。

        OS攻击案例

          在表单中写入OS命令,将操作系统中指定文件的内容发送到攻击者的邮箱中。

      4、HTTP头部注入攻击

        HTTP头部注入攻击(HTTP Header Injection)是指攻击者通过在响应头部字段内插入换行,添加任意响应头部或主体的一种攻击。属于被动攻击模式。

        向头部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response Splitting Attack)。如:

          Web应用有时会把从外部接收到的数值,赋给响应头部字段Location和Set-Cookie。

        HTTP头部注入攻击可能造成以下一些影响:

          (1)、设置任何Cookie信息

          (2)、重定向至任意URL

          (3)、显示任意的主体(HTTP响应截断攻击)

      5、邮件头部注入攻击

        邮件头部注入是指Web应用中的邮件发送功能,攻击者通过向邮件头部To或Subject内任意添加非法内容发起的攻击。利用存在安全漏洞的Web网站,可对

      任意邮件地址发送广告邮件或病毒邮件。

      6、目录遍历攻击

        目录遍历攻击是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。这种攻击有时也称为路径遍历攻击

        通过Web应用对文件处理操作时,在由外部指定文件名的处理存在疏漏的情况下,用户可使用../等相对路径定位到/etc/passwd等绝对路径上,因此服务器上

      任意的文件或文件目录皆有可能被访问到。这样一来,就有可能非法浏览、篡改或删除Web服务器上的文件。因此应该关闭指定对任意文件名的访问权限。

      7、远程文件包含漏洞

        是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。

        这主要是PHP存在的安全漏洞,对PHP的include或require来说,这是一种通过设定,指定外部服务器的URL作为文件名的功能。因为该功能太危险,PHP5.2.0

      之后默认设定此功能无效。

      因设置或设计上的缺陷引发的安全漏洞

      是指错误设置Web服务器,或是由设计上的一些问题引起的安全漏洞    

      8、强制浏览

        强制浏览安全漏洞是指,从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件

        强制浏览有可能造成以下一些影响:

          1)泄漏顾客的个人信息等重要情报

          2)泄漏原本需要访问权限的用户才可查阅的信息内容

          3)泄漏未连接到外界的文件

        对那些原本不愿公开的文件,为了保证安全会隐蔽其URL。可一旦知道了那些URL,也就意味着可浏览URL对应的文件。直接显示容易推测的文件名或文件目录

      索引时,通过某些方法可能会使URL产生泄漏。

        如:在需要访问权限控制的页面中,不具备对图片访问权限的控制,攻击者通过源代码获取图片地址可直接访问需要权限才能访问的页面上的图片信息。

      9、不正确的错误消息处理

        是指Web应用的错误信息内包含对攻击者有用的信息,与Web应用有关的主要错误信息如下所示:

          1)Web应用抛出的错误信息

          2)数据库等系统抛出的错误信息

        Web应用不必在用户的浏览页面上展现详细的错误信息。对攻击者来说,详细的错误消息有可能给它们下一次攻击以提示。

        如:在登录时会提示手机号未注册,当已注册可能会提示密码错误等其他消息。攻击者利用不同的输入提示不同的错误信息,就能判断手机号是否在这个网站注册过了。

        所以建议将提示的消息尽可能模糊。

      10、开放重定向

        开发重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。而于此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的Web网站。

        

     因会话管理疏忽引发的安全漏洞

      会话管理是用来管理用户状态的必备功能,但是如果在会话管理上有所疏忽,就会导致用户的认证状态被窃取等后果。

      11、回话劫持

        会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。

        具备认证功能的Web应用,使用会话ID的会话管理机制,作为管理认证状态的主流方式。会话ID中记录客户端的Cookie等信息,服务器端将会话ID与认证状态进行

      一对一的匹配管理。

        攻击者可获取会话ID的途径:

          1)通过非正规的生成方法推测会话ID

          2)通过窃听或XSS攻击盗取会话ID

          3)通过会话固定攻击(Session Fixation)强行获取会话ID

        案例:攻击者在得知该Web网站存在可跨站攻击XSS的安全漏洞之后,就设置好用JavaScript脚本调用document.cookie以窃取Cookie信息的陷阱,一旦用户踏入

      陷阱(访问了该脚本),攻击者就能获取含有会话ID的Cookie。攻击者在拿到用户的会话ID后,往自己的浏览器的Cookie中设置该会话ID,即可伪装成会话ID遭窃的

      用户,访问Web网站了。

      12、会话固定攻击

        对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击(Session Fixation)攻击会强制用户使用攻击者指定的会话ID,属于被动攻击。案例步骤:

          1)、攻击者访问需要认证的页面

          2)、服务器发布一个未认证状态的会话ID(http://xxx/login?SID=xxx)

          3)、攻击者将上面未认证的会话ID URL作为陷阱,诱导用户前去认证,认证后,会话ID变为已认证状态

          4)、攻击者即可访问网站

      13、跨站点请求伪造(CSRF)

        跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些

      状态更新,属于被动攻击。跨站点请求伪造有可能会造成以下影响:

        1)利用已通过认证的用户权限灯芯设定信息等

        2)利用已通过认证用户权限购买商品

        3)利用已通过认证的用户权限在留言板上发表言论

        案例:用户A通过认证登录某网站,攻击者不下陷阱,A触发了攻击者布下的陷阱将利用A的身份和权限(因为用户A的浏览器中Cookie持有已认证的会话ID)去

      执行发表言论等动作。

     其他安全漏洞

      14、密码破解

        密码破解(Password Cracking)即算出密码,突破认证。攻击不限于Web应用,还包括其他的系统(如FTP或SSH等),密码破解有以下两种手段:

          1)通过网络的密码试错(穷举法,字典攻击)

          2)对已加密密码的破解(指攻击者入侵系统,以获取加密或散列处理的密码数据的情况)

        除了突破认证的攻击手段,还有SQL注入攻击逃避认证,跨站脚本攻击窃取密码信息等方法

        Web应用在保存密码时,一般不会以明文的方式保存,通过散列函数做散列处理或加salt的手段对要保存的密码本身加密。这样即使攻击者使用某些手段窃取密码

      数据,如果想要真正使用这些密码,则必须先通过解码等手段,把加密处理的密码还原成明文形式。从加密过的数据拿到明文通常有以下几种方法:

        1)通过穷举法-字典攻击进行类推

        2)彩虹表(由明文密码及与之对应的散列值构成的一张数据库表)

        3)拿到加密密钥

        4)加密算法的漏洞(极困难)

      15、点击劫持

        是指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上。然后诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段。这种行为又称为界面伪装。

        已设置陷阱的Web页面,表面上并看不出来,但实际上已埋入了想让用户点击的链接,当用户点击到透明按钮时,实际上是点击了已指定透明属性元素的iframe页面。

        在做过手脚的Web页面上,目标的页面将作为透明层覆盖在游戏网页上,覆盖时,要保证想让用户点击的透明页面的按钮和覆盖的按钮重叠。

      16、DoS攻击

        是一种让运行中的服务呈停止状态的攻击。有时也叫服务停止攻击或拒绝服务攻击。DoS攻击的对象不受限于Web网站,还包括网络设备及服务器等。

        主要有以下两种DoS攻击方式:

          1)利用集中访问请求造成资源过载,资源用尽的同时,实际上服务也就呈停止状态

          2)通过攻击安全漏洞使服务停止

      17、后门程序

        是指开发设置的隐藏入口,可不按正常步骤使用受限功能。通常的后门程序分为以下3种类型:

          1)开发阶段作为Debug调用的后门程序

          2)开发者为了自身利益植入的后门程序

          3)攻击者通过某种方法设置的后门程序

  • 相关阅读:
    npm registry
    JS函数addEventListener的浏览器差异性封装
    C# WinForm 异步执行耗时操作并将过程显示在界面中
    在server 2008/2003中 取消对网站的安全检查/去除添加信任网站
    SQL语句中将Datetime类型转换为字符串类型
    未在本地计算机上注册 Microsoft.Jet.OLEDB.4.0 提供程序
    当应用程序不是以 UserInteractive 模式运行时显示模式对话框或窗体是无效操作
    TFS2012常见问题及解答
    笔记《Hbase 权威指南》
    读Java 804
  • 原文地址:https://www.cnblogs.com/yangyongjie/p/11595350.html
Copyright © 2020-2023  润新知