漏洞防御以及概念

防止sql注入的方法?

1.过滤掉一些常见的数据库操作关键字:select  delete update insert  and  *  from where or

 或者用addslashes来进行过滤 在特殊符号前加反斜线

2.在PHP配置中 register_globals=off;  将注册全局变量关闭。

3.SQL语句书写的时候尽量不要省略小引号(``tab键上面那个)和单引号。

4.提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的

5.对于常用的方法加以封装,避免直接暴露SQL语句。

6.开启PHP安全模式safe_mode=no;

7.打开magic_quotes_gpc来防止sql,magic_quotes_gpc=off默认是关闭的,它打开后将自动把用户提交的SQL语句的查询进行转换,把' 单引号 转为\'。

8.关闭错误提示信息,将错误信息记录到系统日志。

9.使用mysqli 或 PDO进行处理 预处理。

 

注意概念:

内容分发网络(CDN):一个托管的、地理分布的服务器网络,它可以改善网站的文件传输和性能。它还包含了诸如DDoS保护之类的安全特性。

持续威胁管理:基于预防技术的适应性和预见性防御,为及时的事件反应做好准备。

跨站点请求伪造(CSRF):一个恶意的web攻击,一个攻击程序迫使一个用户的浏览器在一个用户当前身份验证的站点上执行不需要的操作。

跨站点脚本(XSS):通过客户端脚本攻击应用程序的一种类型的注入攻击,通常是JavaScript。

加密货币:一种加密的数字交换,其加密技术被用作一种方法,以确保被监管和验证的安全交易发生。

网络安全:一种旨在保护计算机、数据和网络免受潜在攻击或未经授权的访问的实践。

注入攻击:攻击者将恶意代码通过应用程序传递到另一个系统,以恶意操纵应用程序。这些攻击可以通过系统调用、通过shell命令的外部程序或通过查询语言(SQL)注入的数据库来攻击操作系统。

安全套接字层(SSL):一种加密的链接,它可以作为一种保护信息安全的手段,它可以在web服务器和私有浏览器之间传递。

安全设计:安全在SDLC开始时集成。

单点登录(SSO):用户或会话身份验证过程,允许用户输入一组凭证,以便访问由SSO软件连接的多个应用程序。

SQL注入:一种代码注入技术,用于攻击数据驱动的应用程序,在该应用程序中,将邪恶的SQL语句插入到一个输入字段中,以便执行。

 

软件开发中的安全主题常常对不同的团队有许多不同的含义。为了帮助解答围绕安全性的问题和困惑,DZone的Editorial团队编制了一份读者应该知道的与安全相关的最重要的术语列表。

A

异常检测:人工智能和深度学习具有检测异常登录,网络内部移动或文件输出的能力。

应用程序安全性(AppSec):一个可以让专家专注于应用程序的安全设计方面,并且更加熟悉编程的IT领域。

身份验证:在请求访问系统中的资源时,确认用户身份的一种机制。当用户通过诸如密码之类的机制来确认身份时,通常会向用户授予访问令牌。

B

比特币:一种不受任何管理机构控制的数字货币(加密货币)。

区块链:一个大型的交易数据库,也被称为交易分类帐。

C

内容分发网络(CDN):一个托管的、地理分布的服务器网络,它可以改善网站的文件传输和性能。它还包含了诸如DDoS保护之类的安全特性。

持续威胁管理:基于预防技术的适应性和预见性防御,为及时的事件反应做好准备。

跨站点请求伪造(CSRF):一个恶意的web攻击,一个攻击程序迫使一个用户的浏览器在一个用户当前身份验证的站点上执行不需要的操作。

跨站点脚本(XSS):通过客户端脚本攻击应用程序的一种类型的注入攻击,通常是JavaScript。

加密货币:一种加密的数字交换,其加密技术被用作一种方法,以确保被监管和验证的安全交易发生。

网络安全:一种旨在保护计算机、数据和网络免受潜在攻击或未经授权的访问的实践。

D

数据过滤:未经授权的数据传输。它可以手动执行,也可以通过一个恶意的自动化程序进行。

分散式自治组织(DAO):一个作为风险资本基金形式的组织。它通过智能合同运行,其交易记录保存在区块链中。

拒绝服务攻击(DDoS):一种类型的攻击,它使用多个受攻击的系统,这些系统被迫访问一个网站或系统,并使其带宽过载,从而导致停机。

DevSecOps:将安全性集成到DevOps方法中。

动态应用程序安全测试(DAST):对应用程序安全性的分析,它只监视运行时环境和在其中执行的代码。它模拟潜在的攻击,并分析结果。

E

加密:一种对数据进行编码的方法,使它对没有解密方法的各方来说是不可读的。

开发:利用计算机软件或硬件中的漏洞来产生不良行为的一段代码。

I

注入攻击:攻击者将恶意代码通过应用程序传递到另一个系统,以恶意操纵应用程序。这些攻击可以通过系统调用、通过shell命令的外部程序或通过查询语言(SQL)注入的数据库来攻击操作系统。

**交互式应用程序安全测试(IAST):**SAST和DAST的组合,通常以代理的形式实现,该代理可以监视攻击并识别测试运行时环境中的漏洞。

M

恶意软件:指对计算机或程序造成伤害的软件。

O

混淆层:设计为在关键的代码部分提供高级别的保护。

开放的web应用程序安全项目(OWASP):一个由企业、教育组织和个人提供的在线社区,致力于为更广泛的开发社区提供web安全工具、资源、事件等等。

R

勒索软件:一种恶意软件,它会限制或阻止对受害者的系统的访问,直到支付赎金,通常是比特币这样的加密货币。

风险管理:根据公司或行业的情况,优先考虑最重要的事情。

运行时应用程序自我保护(RASP):一种内置在应用程序中的特性,可以自动检测和阻止攻击。

Reentrancy攻击:不受信任的代码重新输入契约并操纵状态的攻击。

S

安全套接字层(SSL):一种加密的链接,它可以作为一种保护信息安全的手段,它可以在web服务器和私有浏览器之间传递。

安全设计:安全在SDLC开始时集成。

单点登录(SSO):用户或会话身份验证过程,允许用户输入一组凭证,以便访问由SSO软件连接的多个应用程序。

SQL注入:一种代码注入技术,用于攻击数据驱动的应用程序,在该应用程序中,将邪恶的SQL语句插入到一个输入字段中,以便执行。

静态应用程序安全测试(SAST):对应用程序的安全性进行分析,查看应用程序的源代码、字节码或二进制代码,以确定是否有某些部件可以允许攻击者进行安全性行为。

T

威胁矢量:黑客(或破坏者)可以访问计算机或网络服务器的路径或方法,以便交付有效负载或恶意结果。

图灵完备:如果没有考虑到内存或运行时的限制,理论上可以解决任何计算问题。

W

Web应用程序防火墙(WAF):一个基于可定制规则监视、过滤和阻塞HTTP传输的设备或应用程序。

Z

零日:软件制造商或反病毒供应商目前所不知道的一个漏洞。它还引用了一段代码,允许攻击者利用一个零日漏洞。

 

Cookie的处理[编辑]

Cookie 本身是客户端的内容,对于程序员来说,它并不是完全可靠的内容。黑客可以在客户端任意修改Cookie的设置。因此,对于重要的Cookie内容一定要做到:

  • 加密cookie,防止明文cookie被第三者窃取。^ rot13 base64encode gz
  • 设置合适的有效期,让cookie过一定时间后自动失效。
  • 对Cookie处理加验证码,最好验证码也加上有效期 。
  • 在cookie关键项中设置httponly属性,有效防止XSS跨站通过js盗取cookie。

防SQL注入[编辑]

  • 用户的一切输入都是不可信任的。客户端的合法性校验都是可以伪造的。不管客户端是否验证过用户输入,服务器端都需要再检验一遍。

注:考虑$_GET,$_POST ,$_COOKIE, $GLOBALS,$_SERVER等

  • 不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 当sql语句中需要引入外部变量时,使用sprintf来格式化输出所有的变量。数值型用%d或%.2f这种形式,字符串类型用%s格式。
    • 整型变量必须使用intval()、(int)进行处理、或强制转换。
    • 浮点型变量必须使用floatval()、(float)、doubleval()、(double)进行处理、或强制转换。
    • 字符串类型的变量必须用mysql_escape_string处理,避免注入。

注:还有其他不常用的类型,bool、array、object等

  • 判断magic_quotes_gpc是否开启,如若未开启,在接收字符串数据时,使用addslashes()可起到相同转义特殊字符的功效(单引号、双引号、反斜杠、NULL)。
  • 调用prepare+excute方法来使用来自外部的变量(针对PDO)。

注:SQL注入是十分严重的安全问题,不仅仅会造成数据泄露,其他影响也是不容忽视的,甚至会威胁整站安全等。


防跨站脚本攻击(XSS)[编辑]

  • 当需要显示一段来自 php 外部(这里的外部包括但不限于 $_GET, $_POST, $_REQUEST,$_COOKIE, $_SESSION, $_SERVER, 数据库, 文本文件)的字符串内容的时候,除非有特殊需要,否则,都要用htmlspecialchars 将它转义。

注:处理外部的数值型用sprintf, intval等更方便。

  • 出于安全目的过滤字符的时候,尽量使特殊字符通过转义后在视觉上保持原样输出,而不能靠“吃掉”特殊字符来实现。
   比如<script xxx>替换成<script xxx>
   比如<iframe xxx>替换成<iframe xxx>
   而不能替换成< xxx>
   目的是为了提升安全性的时候不要忘了用户体验。
  • js中使用location时,不能直接取地址,而是使用 location.hostname + location.pathname 代替,这样可以有效防止基于DOM的XSS。
  • 任何取地址的情况都必须针对所取地址内参数进行转义。这样可以有效防止反射型跨站或基于URI的XSS。

注:特别需要注意前台页面存在反馈、建议、投诉且后台有审核的功能,必须针对输入内容进行安全处理。


防跨站请求伪造攻击(CSRF)[编辑]

  • 所有涉及金钱、虚拟货币、积分、文章等事物的删除、修改等业务请求,或者是读取隐私数据等重要功能的操作,都要用POST方法来执行,以避免自动请求。
  • 重要功能应避免持久授权,应使用验证码、随机密钥或密码进行二次验证,避免非人为操作。
   例:http://www.xxx.com/log.php?op=del&cryid=34ee6aef884fd57aa10
   参数 Cryid 是随机密钥(或验证码),如果没有随机密钥,删除请求是不会成功的,这样就不会产生自动请求,csrf也就避免了,出于更安全的考虑,以post方法提交更为妥当。

防止跨域跳转[编辑]

  • 尽量避免跨域跳转的发生,严格校验跳转地址是否同域。
  • 如业务需求需要产生跨域跳转,则作固定域校验,严格校验跳转地址域名是否合法。
   例:http://www.xxx.com/login.php?backurl=http://www.xxx.com
   一定要校验跳转地址参数backurl内的地址是否合法,同域或在固定域范围内,可有效防止被钓鱼(模仿站)的可能。

防止木马文件上传(严重安全问题)[编辑]

  • 不管客户端用js或flash做了什么判断,上传用的php程序必须再次验证上传文件类型.绝对禁止.php、.html等网页格式文件上传。
  • 尽量避免使用第三方插件作为上传工具.如若不能避免,插件需及时更新版本。第三方工具可能会存在上传漏洞,导致安全问题产生。
   例如:FckEditor、EWebEditor、XhEditor  等,这些第三方编辑器经常会暴露新的上传bug。
   注:一旦产生上传漏洞,会给整站带来威胁。

防止用户密码泄露[编辑]

  • 密码框输入内容必须掩码形式显示,如:******。
  • 用户信息提交必须以 POST 方法提交,同时提交参数应以密文形式传输,如果条件允许,
  • 建议以动态密文的方式加密,保证密文被窃取后失效。
  • 服务端接收后进行二次加密存储。
  • 用户名、密码输入错误时,提示需合理、严谨,不能暴露信息、猜解信息,无论用户名、还是密码输入错误,均应提示“用户名或密码错误!”,有输入错误次数限制,或时间限制,建议伴随验证码机制。

注:开发人员在设置管理账户、测试账户时应保证密码的复杂度,严格避免弱口令的产生,上线后确保管理账户的安全性,管理权限的测试账户需及时删除。


防止越权、越级访问[编辑]

  • 用户权限的控制,必须赋予私有页面、路径访问权限的验证,避免越权访问。

防止敏感信息泄露[编辑]

  • 建立良好的错误相应机制,通过判断服务器返回的 http 错误码,给予相对应的提示(建议设计友好的提示页面),避免报错导致网站的敏感信息泄露。注:考虑安全问题的同时,也考虑用户体验。

例如:

  • 项目上线前、后,及时清理各种格式的备份文件、测试页面、工具等可访问、可下载资

源(非项目需要的),避免源代码、网站信息泄露,或控制访问权限。 包括:

    • 各种格式的备份文件(zip、rar、bak、txt、php~、sql等,导致源码泄露)
    • phpinfo()测试页(暴露整站的详细配置)
    • 工具、服务软件(phpmyadmin、svn、.git、apache目录等)

Phpmyadmin:SNV: nginx目录(暴露网站太多敏感信息,包括日志):

  • 加强后台管理页面地址的复杂度,如:增加二、三级目录名称的复杂程度,可有效避免后台地址的泄露,不会被轻易获取,或根据需求限制IP访问。
   例:http://www.xxx.com/a8j9fej30/a93ju83h/admin.php红色部分路径的复杂程度直影响攻击者获取后台地址的难度。
  • 加强伪静态地址的复杂度,避免通过伪静态地址轻易的分析出原地址,如果访问原地址则必须立即跳转对应的伪静态地址。

防止本地(远程)文件包含漏洞[编辑]

  • 常见的文件包含函数:
   include()、include_once()、require()、  require_once()、
   fopen()、readfile()...,

使用上述函数包含文件时,必须验证参数传递内容的合法性,避免 相对路径的使用。例:应严格验证参数url内传送的值

posted @ 2017-08-24 15:38  玲汐  阅读(641)  评论(0编辑  收藏  举报