教您如何应用PHP开发出安全的应用程序_PHP
PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法, 并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。最新版本PHP5.01支持目前绝大多数数据库(Mysql、PostgreSQL、Oracle,、DB2、Sybase等)。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点(http: //www.php.net)自由下载。PHP拓展了WEB Server的功能,实现了Web最佳服务的后端延展界面,见图-1。
图-1 PHP拓展了WEB Server的功能
PHP全称Professional HyperText PreProcessor。以最新的PHP5.01为例支持它的WEB服务器有:Apache, Microsoft Internet information Sereve, Microsoft Personal web Server, AOL server, Netscape Enterprise 等等。
PHP是一种功能强大的语言和解释器,无论是作为模块方式包含到web服务器里安装的还是作为单独的CGI程序程序安装的,都能访问文件、执行命令或者在服务器上打开链接。而这些特性都使得PHP运行时带来安全问题。
虽然PH P是特意设计成一种比用Perl或C语言所编写的CGI程序要安全的语言,但正确使用编译时和运行中的一些配置选项以及恰当的应用编码将会保证其运行的安全性。由于我们可以在很多不同的方面利用 PHP,因此它有很多设置选项来控制其行为。
一组庞大的可选参数能够保证您可以将 PHP 用于许多不同的目的,但这同时也意味着这些参数和服务端配置的组合会带来一些安全问题。 PHP 的配置与其代码相比,有着同样的灵活性。PHP 可以用来建立完整的服务端应用程序,拥有所有外壳用户的权限;它也可以在被严格控制的环境下用作一个简单的服务端包含,仅承担很小的风险。您如何建立该环境,以及其安全性如何,在很大程度上取决于 PHP 的开发者。 注:本文所有操作在Red Hat Linux 9.0下完成。
一、 安全从头开始
在编译PHP之前,首先确保操作系统的版本是最新的,必要的补丁程序必须安装过。安装编译PHP过程中要注意的4个问题:
1、 使用Apachetoolbox整合Apache,PHP,Mysql 目前最好的web建站黄金组合是Linux Apache Mysql PHP, 但是在实际工作过程中需要分别下载,安装,配置apache,php和mysql,并且需要根据具体情况修改apache的httpd.conf, php的php.ini还有mysql的配置文件,如果你还需要提供ssl功能,那还得下载正确的ssl apache模块,并定制它的.ini文件等,其中的任何步骤出现问题都会导致网站不能正确运行。
想一次完全配置成功,即使对于一个经验丰富的Linux网络管理员也比较困难。Apache Toolbox是用shell脚本写成的。Apache Toolbox可以很很方便的使你定制你的apache按您的要求在Apache支持的52个第三方的软件包以及36个模块中选择。
定制的过程完全用菜单驱动,而且都有简单的说明。所有的组件都是用源代码方式安装,在安装过程中,如果发现RPM包有问题,它还会用wget去重新下载新的可用的组件包。相信对那些网络管理员是一个有用的工具。
Apache Toolbox 可以在GUN命令行下安装,也可以在X窗口下安装,为了方便读者阅读本文以在X窗口下安装为例。在www.apachetoolbox.com下载最新的apachetoolbox安装包。包括apache2.0,mysql3.23.51,php4.3,Python 2.0、 PostgresSQLv7.1等常用建站软件和APC (一种为PHP提供Cache的模块),Apache Toolbox Apache Toolbox提供了一个简单的编译Apache方法,能让你很容易地安装Apache、 SSL,PHP, ZendOptimizer, mod_auth-nds,mod-dynvhost,WebDAV,mod_fastcgi,mod_gzip,mod_layout,mod_throttle,mod_accessref, mod_auth_sys, mod_bandwidth, mod_auth_ldap, mod_perl, openldap.等等以及最新的支持PNG格式的 gd 库。它支持完全的菜单界面。
图-2 Apachetoolbox安装界面
2、按照Apache 模块安装当 PHP 被用作 Apache 的模块时,它将继承 Apache 的用户权限(典型情况为用户"nobody")。 这将对安全及授权机制产生一些冲击。
例如,如果您使用 PHP 来访问数据库,除非数据库本身有内建的访问控制,否则您将使得数据库能够被用户"nobody"访问。这意味着恶意的脚本能够访问并修改数据库,甚至不需要用户名和密码。网络黑客无意中访问到了数据库管理员的 WEB 页面并通过这里删除所有的数据库是完全有可能发生的。
您可以利用 Apache 的认证机制来防止这些的发生,或者也可以利用 LDAP 或 .htaccess 文件等来设计您自己的访问模式,并将这些代码包含为您 PHP 脚本的一部分。
通常,一旦安全机制建立并使得 PHP 的用于(在这种情况下,为 Apache 用户)仅为此承担很小的风险时,我们发现 PHP 此时被禁止往用户目录写入任何文件,或者还有可能被禁止访问和更改数据库。无论往防止的对象中写入文件的好坏以及进入的数据库事务的好坏,其安全性都是同等的。
在这个时候,一个频繁出现的安全错误是给 Apache root 权限,或者用其它方法提升 Apache 的能力。
给 Apache 用户赋予 root 权限是及其危险的,而且有可能会连累整个系统。因此,进行 sudo、chroot,或者以 root 账号运行等操作不应该考虑让那些非安全专家来执行。 还有一些更简单的情况。您可以使用 open_basedir 来控制和限制 PHP 能够使用的目录。您还可以建立 Apache 的专用区域,以将所有基于 WEB 的活动都限制到非用户、系统和文件。
3、把PHP解析器放在Web目录外
一种安全性非常高的方法是把 PHP 解析程序放置到 WEB 文件目录树以外的某个地方,例如,放置到 /usr/local/bin。这种做法唯一的弊病就是您现在需要在所有含有 PHP 标记符文件的第一行添加类似于以下的内容:
<ccid_code></ccid_code>#!/usr/local/bin/php 로그인 후 복사 |
您需要使得这些文件成为可执行文件。也就是说,像对待任何其它 CGI 脚本一样来对待它们。这些 CGI 脚本可能是用 Perl、sh 或者任何其它使用的 #! shell-escape 机制来启动它们自身的脚本语言来编写的。要使这个方法中 PHP 能够正确处理 PATH_INFO 和 PATH_TRANSLATED 信息,在编译 PHP 解析器时必须使用配置参数--enable-discard-path。下面是一个能作为CGI程序运行的PHP脚的例子。
<ccid_code></ccid_code>#!/usr/local/bin/phpecho "This is a my small program" 로그인 후 복사 |
4、最后将PHP请升级为最新稳定版本:4.3.8。
在PHP 4.1中,添加了一组特殊数据以访问外部数据。这些数组可以在任何范围内调用,这使得外部数据的访问更方便。在PHP 4.3.8中,register_globals被默认关闭以鼓励使用这些数组以避免无经验的开发者编写出不安全的PHP代码。作出这样的变化是出于安全性的考虑的。链接:http://www.php.net/downloads.php
二、 安全使用PHP
1、安装安全模块
PHP 的安全模式是为了试图解决共享服务器(shared-server)安全问题而设立的。在结构上,试图在 PHP 层上解决这个问题是不合理的,但修改 WEB 服务器层和操作系统层显得非常不现实。因此许多人,特别是 ISP,目前使用安全模式。
表-1.安全模式配置指令
名称 | 默认值 | 类型 |
safe_mode | "0" | 布尔型 |
safe_mode_gid | "0" | 布尔型 |
safe_mode_include_dir | NULL | 字符串 |
safe_mode_exec_dir | "" | 字符串 |
safe_mode_allowed_env_vars | PHP_ | 字符串 |
safe_mode_protected_env_vars | LD_LIBRARY_PATH | 字符串 |
disable_functions | "" | 字符串 |
disable_classes | "" | 字符串 |
open_basedir | NULL | 字符串 |
以下是该配置选项的简要解释。
(1)safe_mode boolean
是否启用 PHP 的安全模式。
(2)safe_mode_gid
默认情况下,安全模式在打开文件时会做 UID 比较检查。如果你想将其放宽到 GID 比较,则打开 safe_mode_gid。是否在文件访问时使用 UID(FALSE)或者 GID(TRUE)来做检查。
(3)safe_mode_include_dir
当从此目录及其子目录(目录必须在 include_path 中或者用完整路径来包含)包含文件时越过 UID/GID 检查。
从 PHP 4.2.0 开始,本指令可以接受和 include_path 指令类似的风格用分号隔开的路径,而不只是一个目录。
(4)safe_mode_exec_dir
如果 PHP 使用了安全模式,system() 和其它执行系统程序的函数将拒绝启动不在此目录中的程序。
(5)safe_mode_allowed_env_vars
设置某些环境变量可能是潜在的安全缺口。本指令包含有一个逗号分隔的前缀列表。在安全模式下,用户只能改变那些名字具有在这里提供的前缀的环境变量。默认情况下,用户只能设置以 PHP_ 开头的环境变量(例如 PHP_FOO = BAR)。
(6)safe_mode_protected_env_vars
本指令包含有一个逗号分隔的环境变量的列表,最终用户不能用 putenv() 来改变这些环境变量。甚至在 safe_mode_allowed_env_vars 中设置了允许修改时也不能改变这些变量。
(7)disable_functions
本指令允许你基于安全原因禁止某些函数。接受逗号分隔的函数名列表作为参数。 disable_functions 不受安全模式的影响。 本指令只能设置在 php.ini 中。例如你不能将其设置在 httpd.conf。
(8)disable_classes
本指令可以使你出于安全的理由禁用某些类。用逗号分隔类名。disable_classes 不受安全模式的影响。 本指令只能设置在 php.ini 中。例如你不能将其设置在 httpd.conf。该指令自 PHP 4.3.2 起可用。
(9)open_basedir
将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
2、以安全模式运行PHP
以安全模式运行PHP是使PHP脚本安全使用的好方法,特别是在允许用户使用自己开发的PHP脚本时。使用安全模式会使PHP在运行函数时检查是否存在安全问题。include、readfile、fopen、file、unlink、rmdir等等:被包含的文件或者该文件所在目录的所有者必须是正在运行的脚本的所有者; Exec、System、Passthm等:要执行的程序必须位于特定的目录(默认为/usr/local/php/bin)。编译PHP时可以用- -with-exe-dir选项设定这个值。
Mysql_Connect:这个函数用可选的用户名连接MySQL数据库。在安全模式下,用户名必须是当前被执行的脚本的所有者,或运行httpd的用户名(通常是nobody)。
HTTP Authentication:包含HTTP验证代码脚本所有者的用户ID(数字型)会自动加到验证域。这样可以防止有人通过抓取密码的程序来欺骗同一个服务器上的HTTP验证脚本。
3、使用用户识别和验证
有时需要唯一地确认一个用户。用户通常由请求和响应系统确认。用户名/口令组合就是这种系统的一个很好的例子,比如系统要求给出A1i的口令,响应的是Ali的口令。这样验证是因为只有Ali才知道这个口令。
(1)服务器端用户验征
这是用于服务端上对PHP程序要求最小的验证方法。只要让Apache来管理对用户的验证就行了。
<ccid_code></ccid_code>AuthName "Secret page" AuthType Basic# The password file has been placed outside the web treeAuthUserFile /home/car2002/website.pw<limit get post>require valid-user</limit> 로그인 후 복사 |
你需要把上述文件(文件名为.htaccess)放在需要保护的地方。用Apache的htpasswd程序,可以建立包含用户名和口令组合的文件。把这个文件放在Web目录树之外,只让该文件的拥有者查看和修改这个文件。当然,Web服务器必须能够读取这个文件。
如果想读取被保护的目录,Web服务器要求浏览器提供用户名和密码。浏览器弹出对话框,用户可以输入他们的用户名和密码。如果用户名和密码与口令文件中相符合,就允许用户读取被保护的页面;反之,将得到错误页面,告诉用户没有通过验证。被保护的域会显示出来以便用户知道输入那个用户名和密码。
(2)在PHP中进行用户识别和验证
和在Apache服务器端进行用户识别和验证相比,在PHP进行用户识别和验证有以下优点:
A、 可注销。用户可以注销身份验证,这在Apache无法实现。
B、 可失效。你可以在一定设计后让登陆失效。如用户登录后60分钟没有浏览你的网站,你可强制他们重新通过验证。
C、 可定制。例如可以用小的JavaApplet加密要传送的口令,而在服务器上用mcryet库解密,这个工作可以在任何支持Java的浏览器上进行。
D、 可基于数据库。你可以用保存在各种各样的数据库里的数据来验证用户,并且记录访问者访问网站的详细日志。
E、 可用于每个页面。你可在每个页面上决定是否需要验证,当然在Apache服务器通过改变域也可以做到这一点。
F、 你也可以使浏览器弹出对话框。下面的例子显示了怎样从,MySQL数据库中检索用名和口令:让用户填人用户名和口令。
<ccid_code></ccid_code><?if (!isset($PHP_AUTH_USER)) { Header("WWW-authenticate: basic realm=\"restricted area\""); Header( "HTTP/1.0 401 Unauthorized"); echo "You failed to provide the correct password...\n";exit; } else { mysql_select_db("users") ; $user_id = strtolower($PHP_AUTH_USER); $result = mysql_query("SELECT password FROM users " ."WHERE username = '$username'") ; $row = mysql_fetch_array($result) ; if ($PHP_AUTH_PW != $row["password"]) { Header( "WWW-authenticate: basic realm=\"restricted area\"Header ( "HTTP/1.0 401 Unauthorized"); echo "You failed to provide the correct password...\n" ; exit; } }?>Only users with a working username /password combination can see this 로그인 후 복사 |
例子:用 PHP 进行 HTTP 认证

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











iPhone의 Shazam 앱에 문제가 있나요? Shazam은 노래를 듣고 노래를 찾는 데 도움을 줍니다. 하지만 Shazam이 제대로 작동하지 않거나 노래를 인식하지 못하는 경우 수동으로 문제를 해결해야 합니다. Shazam 앱을 복구하는 데 시간이 오래 걸리지 않습니다. 따라서 더 이상 시간을 낭비하지 않고 아래 단계에 따라 Shazam 앱 문제를 해결하세요. 수정 1 – 굵은 텍스트 기능 비활성화 iPhone의 굵은 텍스트로 인해 Shazam이 제대로 작동하지 않을 수 있습니다. 1단계 – iPhone 설정에서만 이 작업을 수행할 수 있습니다. 그러니 열어보세요. 2단계 – 다음으로 "디스플레이 및 밝기" 설정을 엽니다. 3단계 - "굵은 텍스트"가 활성화된 경우

홈 화면에서 중요한 항목을 삭제하고 다시 복구하려고 하시나요? 다양한 방법으로 앱 아이콘을 화면에 다시 표시할 수 있습니다. 우리는 당신이 따라갈 수 있는 모든 방법과 홈 화면에 앱 아이콘을 다시 넣을 수 있는 방법에 대해 논의했습니다. 방법 1 - 앱 라이브러리에서 앱 아이콘 바꾸기 앱 라이브러리에서 직접 홈 화면에 앱 아이콘을 배치할 수 있습니다. 1단계 – 옆으로 스와이프하여 앱 라이브러리의 모든 앱을 찾습니다. 2단계 – 이전에 삭제한 앱 아이콘을 찾습니다. 3단계 – 메인 라이브러리의 앱 아이콘을 홈 화면의 올바른 위치로 드래그하기만 하면 됩니다. 이것은 응용 다이어그램입니다

Java 프레임워크 디자인은 보안 요구 사항과 비즈니스 요구 사항의 균형을 유지하여 보안을 가능하게 합니다. 즉, 주요 비즈니스 요구 사항을 식별하고 관련 보안 요구 사항의 우선 순위를 지정합니다. 유연한 보안 전략을 개발하고, 계층적으로 위협에 대응하고, 정기적으로 조정하세요. 아키텍처 유연성을 고려하고 비즈니스 발전을 지원하며 보안 기능을 추상화합니다. 효율성과 가용성의 우선순위를 정하고 보안 조치를 최적화하며 가시성을 향상시킵니다.

PHP 마이크로프레임워크에서 Slim과 Phalcon의 보안 비교에서 Phalcon에는 CSRF 및 XSS 보호, 양식 유효성 검사 등과 같은 보안 기능이 내장되어 있는 반면 Slim에는 기본 보안 기능이 부족하고 수동 구현이 필요합니다. 보안 조치. 보안이 중요한 애플리케이션의 경우 Phalcon은 보다 포괄적인 보호 기능을 제공하며 더 나은 선택입니다.

C++에서 기계 학습 알고리즘을 구현할 때 데이터 개인 정보 보호, 모델 변조, 입력 유효성 검사를 포함한 보안 고려 사항이 중요합니다. 모범 사례에는 보안 라이브러리 채택, 권한 최소화, 샌드박스 사용 및 지속적인 모니터링이 포함됩니다. 실제 사례에서는 Botan 라이브러리를 사용하여 CNN 모델을 암호화 및 해독하여 안전한 교육 및 예측을 보장하는 방법을 보여줍니다.

Struts2 애플리케이션을 보호하려면 다음 보안 구성을 사용할 수 있습니다. 사용하지 않는 기능 비활성화 콘텐츠 유형 확인 활성화 입력 유효성 검사 보안 토큰 활성화 CSRF 공격 방지 RBAC를 사용하여 역할 기반 액세스 제한

SHIB 코인은 더 이상 투자자들에게 낯설지 않습니다. 시장이 발전함에 따라 SHIB의 현재 시가총액은 12위를 기록하며 수많은 투자를 유치하고 있는 것을 볼 수 있습니다. .투자자는 투자에 참여합니다. 과거 시장에서는 빈번한 거래 및 지갑 보안 사고가 있었고 많은 투자자들이 SHIB 코인을 보관하는 데 어떤 지갑이 더 안전한지 궁금해했습니다. 시장 데이터 분석에 따르면 상대적으로 안전한 지갑은 주로 OKXWeb3Wallet, imToken 및 MetaMask 지갑이며, 다음으로 편집자가 이에 대해 자세히 설명하겠습니다. SHIB 코인은 어느 지갑이 더 안전한가요? 현재 SHIB 코인은 OKXWe에 상장되어 있습니다.

SpringBoot Framework의 보안을 강화하는 방법 사용자 데이터를 보호하고 공격을 방지하려면 SpringBoot 애플리케이션의 보안을 강화하는 것이 중요합니다. 다음은 SpringBoot 보안을 강화하는 몇 가지 주요 단계입니다. 1. HTTPS를 활성화합니다. HTTPS를 사용하여 서버와 클라이언트 사이에 보안 연결을 설정하여 정보가 도청되거나 변조되는 것을 방지합니다. SpringBoot에서는 application.properties에서 다음을 구성하여 HTTPS를 활성화할 수 있습니다: server.ssl.key-store=path/to/keystore.jksserver.ssl.k
