欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2023年PHP安全性漫谈.docx

    • 资源ID:70168485       资源大小:16.99KB        全文页数:11页
    • 资源格式: DOCX        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2023年PHP安全性漫谈.docx

    2023年PHP安全性漫谈 PHP安全性漫谈 今日,我在这里所商量的安全性环境是在Linux+Apache+Mysql+PHP。超出此范围的安全性问题不在本文范畴之内。 一、apache server安全性设置 1、以Nobody用户运行 一般状况下,Apache是由Root 来安装和运行的。假如Apache Server进程具有Root用户特权,那么它将给系统的安全构成很大的威逼,应确保Apache Server进程以最可能低的权限用户来运行。通过修改 d.conf文件中的以下选项,以Nobody用户运行Apache 到达相对安全的目的。 User nobody Group -1 2、ServerRoot名目的权限 为了确保全部的配置是适当的和安全的,需要严格掌握Apache 主名目的访问权限,使非超级用户不能修改该名目中的内容。Apache 的主名目对应于Apache Server配置文件 d.conf的Server Root掌握项中,应为: Server Root /usr/local/apache 3、SSI的配置 在配置文件access.conf 或 d.conf中确实Options指令处加入Includes NO EXEC选项,用以禁用Apache Server 中的执行功能。避开用户直接执行Apache 服务器中的执行程序,而造成服务器系统的公开化。 Options Includes Noexec 4、阻挡用户修改系统设置 在Apache 服务器的配置文件中进行以下的设置,阻挡用户建立、修改 .htaccess文件,防止用户超越能定义的系统安全特性。 AllowOveride None Options None Allow from all 然后再分别对特定的名目进行适当的配置。 5、转变Apache 服务器的缺省访问特性 Apache 的默认设置只能保障肯定程度的安全,假如服务器能够通过正常的映射规则找到文件,那么客户端便会获取该文件,如 :/local host/ root/ 将允许用户访问整个文件系统。在服务器文件中加入如下内容: order deny,ellow Deny from all 将禁止对文件系统的缺省访问。 6、CGI脚本的安全考虑 CGI脚本是一系列可以通过Web服务器来运行的程序。为了保证系统的安全性,应确保CGI的作者是可信的。对CGI而言,最好将其限制在一个特定的目 录下,如cgi-bin之下,便于管理;另外应当保证CGI名目下的文件是不行写的,避开一些欺骗性的程序驻留或混迹其中;假如能够给用户提供一个安全性 良好的CGI程序的模块作为参考,或许会削减很多不必要的麻烦和安全隐患;除去CGI名目下的全部非业务应用的脚本,以防异样的信息泄漏。 7、SSL链接加密 以上这些常用的举措可以给Apache Server 一个基本的安全运行环境,明显在具体实施上还要做进一步的细化分解,制定出符合实际应用的安全配置方案。 二、PHP安全性设置 服务器并不能阻挡全部的安全问题,例如程序漏洞问题、用户输入表单问题、PHP文件权限问题等。 也可以通过一些手段来迷惑黑客或者别有专心者。 1、程序代码漏洞问题 许多 PHP 程序所存在的重大弱点并不是 PHP 语言本身的问题,而是编程者的安全意识不高而导致的。因此,必需时时留意每一段代码可能存在的问题,去发觉非正确数据提交时可能造成的影响。 unlink $evil_var; fwrite $fp, $evil_var; system $evil_var; exec $evil_var; ?> 必需时常留意你的代码,以确保每一个从客户端提交的变量都经过适当的检查,然后问自己以下一些问题: 此脚本是否只能影响所预期的文件? 非正常的数据被提交后能否产生作用? 此脚本能用于打算外的用处吗? 此脚本能否和其它脚本结合起来做坏事? 是否全部的事务都被充分记录了? 在写代码的时候问自己这些问题,否则以后可能要为了增加安全性而重写代码了。留意了这些问题的话,或许还不完全能保证系统的安全,但是至少可以提高安全性。 还可以考虑关闭 register_globals,Magic_quotes 或者其它使编程更方便但会使某个变量的合法性,来源和其值被搞乱的设置。 2、用户输入表单问题 验证用户输入的任何数据,保证PHP代码的安全。 留意1:JS只是为了提高来访用户的体验而产生的,而不是验证的工具。因为任何一个来访的用户都可能会,也有可能无意间就禁用了客户端脚本的执行,从而跳过这层验证。所以我们必需在PHP的服务器端程序上检验这些数据。 留意2:不要使用$_SERVER&39;HTTP_REFERER&39;这个超级变量来检查数据的来源地址,一个很小的'菜鸟黑客都会利用工具来伪造这个变量的数据,尽可能利用Md5,或者rand等函数来产生一个令牌,验证来源的时候,验证这个令牌是否匹配。 3、PHP文件权限问题 PHP 被设计为以用户级别来访问文件系统,所以完全有可能通过编写一段 PHP 代码来读取系统文件如 /etc/passwd,更改网络连接以及发送大量打印任务等等。因此必需确保 PHP 代码读取和写入的是合适的文件。 请看下面的代码,用户想要删除自己主名目中的一个文件。假设此情形是通过 web 界面来管理文件系统,因此 Apache 用户有权删除用户名目下的文件。 $username = $_POST&39;user_submitted_name&39; $homedir = "/home/$username" $file_to_delete = "$userfile" unlink "$homedir/$userfile" echo "$file_to_delete has been deleted!" ?> 既然 username 变量可以通过用户表单来提交,那就可以提交别人的用户名和文件名,并删除该文件。这种状况下,就要考虑其它方式的认证: 只给 PHP 的 web 用户很有限的权限。 -检查全部提交上来的变量。 -以下是更加安全的文件名和变量的验证和检查: $username = $_SERVER&39;REMOTE_USER&39; $homedir = "/home/$username" if !ereg&39;./*$&39;, $userfile die&39;bad filename&39; if !ereg&39;./*$&39;, $username die&39;bad username&39; ?> 4、隐藏PHP扩展名 一般而言,通过隐藏的手段提高安全性被认为是作用不大的做法。但某些状况下,尽可能的多增加一份安全性都是值得的。 一些简洁的方法可以关心隐藏 PHP,这样做可以提高攻击者发觉系统弱点的难度。在 php.ini 文件里设置 expose_php = off ,可以削减他们能获得的有用信息。 另一个策略就是让 web 服务器用 PHP 解析不同扩展名。无论是通过 .htaccess 文件还是 Apache 的配置文件,都可以设置能误导攻击者的文件扩展名: 使PHP看上去像其它的编程语言 AddType application/x- d-php .asp .py .pl 使 PHP 看上去像未知的文件类型 AddType application/x- d-php .bop .foo .133t 使 PHP 代码看上去像HTML页面 AddType application/x- d-php .htm .html 要让此方法生效,必需把 PHP 文件的扩展名改为以上的扩展名。这样就通过隐藏来提高了安全性,虽然防御能力很低而且有些缺点。 三、Mysql数据库安全性设置 PHP 本身并不能爱护数据库的安全。下面的章节只是讲解并描述怎样用 PHP 脚本对数据库进行基本的访问和操作。记住一条简洁的原则:深入防御。爱护数据库的措施越多,攻击者就越难获得和使用数据库内的信息。正确地设计和应用数据库可以削减被攻击的担忧。 PHP安全性漫谈 1、数据库设计问题 应用程序永久不要使用数据库全部者或超级用户帐号来连接数据库,因为这些帐号可以执行任意的操作,比方说修改数据库结构例如删除一个表或者清空整个数据库的内容。以下截图的用户设置是危急的。 应当为程序的每个方面创建不同的数据库帐号,并给予对数据库对象的极有限的权限。仅安排给能完成其功能所需的权限,避开同一个用户可以完成另一个用户的事情。这样即使攻击者利用程序漏洞取得了数据库的访问权限,也最多只能做到和该程序一样的影响范围。 2.数据库连接问题 把连接建立在 SSL 加密技术上可以增加客户端和服务器端通信的安全性,或者 SSH 也可以用于加密客户端和数据库之间的连接。假如使用了这些技术的话,攻击者要监视服务器的通信或者得到数据库的信息是很困难的。 3.数据库数据的加密 SSL/SSH 能爱护客户端和服务器端交换的数据,但 SSL/SSH 并不能爱护数据库中已有的数据。SSL 只是一个加密网络数据流的协议。 假如攻击者取得了直接访问数据库的答应绕过 web 服务器,敏感数据就可能暴露或者被滥用,除非数据库自己爱护了这些信息。对数据库内的数据加密是削减这类风险的有效途径,但是只有很少的数据库提供这些加密功能。 对于这个问题,有一个简洁的解决方法,就是创建自己的加密机制,然后把它用在 PHP 程序内,最常见的例子就是把密码经过 MD5 加密后的散列存进数据库来代替原来的明文密码。 $query = sprintf"INSERT INTO usersname,pwd VALUES&39;%s&39;,&39;%s&39;", addslashes$username, md5$password; $result = pg_query$connection, $query; $query = sprintf"SELECT 1 FROM users WHERE name=&39;%s&39; AND pwd=&39;%s&39;", addslashes$username, md5$password; $result = pg_query$connection, $query; if pg_num_rows$result > 0 echo &39;Welcome, $username!&39; else echo &39;Authentication failed for $username.&39; ?> 4、SQL注入问题 直接 SQL 指令注入就是攻击者常用的一种创建或修改已有 SQL 语句的技术,从而到达取得隐藏数据,或覆盖关键的值,甚至执行数据库主机操作系统指令的目的。这是通过应用程序取得用户输入并与静态参数组合成 SQL 查询来实现的。下面将会给出一些真实的例子。 $query = "SELECT id, name, inserted, size FROM products WHERE size = &39;$size&39; ORDER BY $order LIMIT $limit, $offset;" $result = odbc_exec$conn, $query; ?> 可以在原来的查询的基础上添加另一个 SELECT 查询来获得密码: union select ’1′, concatuname|’-’|passwd as name, ’1971-01-01′, ’0′ from usertable; 假如上述语句使用 ‘ 和 –被加入到 $query 中的任意一个变量的话,那么就麻烦了。 这些攻击总是建立在发掘安全意识不强的代码上的。所以,永久不要信任外界输入的数据,特殊是来自于客户端的,包括选择框、表单隐藏域和 cookie。就如上面的第一个例子那样,就算是正常的查询也有可能造成灾难。 永久不要使用超级用户或全部者帐号去连接数据库。要用权限被严格限制的帐号。 检查输入的数据是否具有所期望的数据格式。PHP 有许多可以用于检查输入的函数,从简洁的变量函数和字符类型函数比方 is_numeric,ctype_digit到冗杂的 Perl 兼容正则表达式函数都可以完成这个工作。 假如程序等待输入一个数字,可以考虑使用 is_numeric 来检查,或者直接使用 settype 来转换它的类型,也可以用 sprintf 把它格式化为数字。 一个更安全的防止SQL注入的分页显示方法: settype$offset, &39;integer&39; $query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;" $query = sprintf"SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;", $offset; ?> PREV ARTICLE如何打造Axure原型NEXT ARTICLE文字作为主体排版的网页设计案例

    注意事项

    本文(2023年PHP安全性漫谈.docx)为本站会员(ylj18****41534)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开