php教程 php手册 确保PHP安全 不能违反的四条安全规则

确保PHP安全 不能违反的四条安全规则

Jun 06, 2016 pm 07:55 PM
php 할 수 없다 안전 확실하게 하다 회로망 규칙 입력하다

欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入 如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。 清单 15. 防止十六进制字符

欢迎进入网络安全论坛,与300万技术人员互动交流 >>进入

 

  如果您处理的是允许在数据库中输入较长条目的表单文本区,那么无法在客户端轻松地限制数据的长度。在数据到达 PHP 之后,可以使用正则表达式清除任何像十六进制的字符串。

  清单 15. 防止十六进制字符串

以下为引用的内容:
로그인 후 복사
로그인 후 복사
로그인 후 복사
<?php 
로그인 후 복사
로그인 후 복사
로그인 후 복사
if ($_POST['submit'] == "go"){
로그인 후 복사
$name = substr($_POST['name'],0,40);    
로그인 후 복사
//clean out any potential hexadecimal characters<br>
로그인 후 복사
$name = cleanHex($name);    
로그인 후 복사
로그인 후 복사
//continue processing....
로그인 후 복사
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
function cleanHex($input){    
로그인 후 복사
로그인 후 복사
$clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);    return $clean; 
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
 
로그인 후 복사
로그인 후 복사
로그인 후 복사

  您 可能会发现这一系列操作有点儿太严格了。毕竟,十六进制串有合法的用途,比如输出外语中的字符。如何部署十六进制 regex 由您自己决定。比较好的策略是,只有在一行中包含过多十六进制串时,或者字符串的字符超过特定数量(比如 128 或 255)时,才删除十六进制串。

  跨站点脚本攻击

  在跨站点脚本(XSS)攻击中,往往有一个恶意用户在表单中(或通过其他用户输入方式)输入信息,这些输入将恶 意的客户端标记插入过程或数据库中。例如,假设站点上有一个简单的来客登记簿程序,让访问者能够留下姓名、电子邮件地址和简短的消息。恶意用户可以利用这 个机会插入简短消息之外的东西,比如对于其他用户不合适的图片或将用户重定向到另一个站点的 Javascrīpt,或者窃取 cookie 信息。

  幸运的是,PHP 提供了 strip_tags() 函数,这个函数可以清除任何包围在 HTML 标记中的内容。strip_tags() 函数还允许提供允许标记的列表,比如

  浏览器内的数据操纵

  有一类浏览器插件允许用户篡改页面上的头部元素和表单元素。使用 Tamper Data(一个 Mozilla 插件),可以很容易地操纵包含许多隐藏文本字段的简单表单,从而向 PHP 和 MySQL 发送指令。

  用户在点击表单上的 Submit 之前,他可以启动 Tamper Data。在提交表单时,他会看到表单数据字段的列表。Tamper Data 允许用户篡改这些数据,然后浏览器完成表单提交。

  让我们回到前面建立的示例。已经检查了字符串长度、清除了 HTML 标记并删除了十六进制字符。但是,添加了一些隐藏的文本字段,如下所示:

  清单 17. 隐藏变量

以下为引用的内容:
로그인 후 복사
로그인 후 복사
로그인 후 복사
<?php 
로그인 후 복사
로그인 후 복사
로그인 후 복사
if ($_POST['submit'] == "go"){    
로그인 후 복사
로그인 후 복사
//strip_tags
로그인 후 복사
$name = strip_tags($_POST['name']);    
로그인 후 복사
$name = substr($name,0,40);    
로그인 후 복사
//clean out any potential hexadecimal characters    
로그인 후 복사
$name = cleanHex($name);    
로그인 후 복사
로그인 후 복사
//continue processing....
로그인 후 복사
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
function cleanHex($input){     
로그인 후 복사
$clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);    
로그인 후 복사
로그인 후 복사
return $clean;
로그인 후 복사
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
 
로그인 후 복사
로그인 후 복사
로그인 후 복사

  注意,隐藏变量之一暴露了表名:users。还会看到一个值为 create 的 action 字段。只要有基本的 SQL 经验,就能够看出这些命令可能控制着中间件中的一个 SQL 引擎。想搞大破坏的人只需改变表名或提供另一个选项,比如 delete。

  现在还剩下什么问题呢?远程表单提交。

  远程表单提交

  Web 的好处是可以分享信息和服务。坏处也是可以分享信息和服务,因为有些人做事毫无顾忌。

  以 表单为例。任何人都能够访问一个 Web 站点,并使用浏览器上的 File > Save As 建立表单的本地副本。然后,他可以修改 action 参数来指向一个完全限定的 URL(不指向 formHandler.php,而是指向 http://www.yoursite.com/formHandler.php,因为表单在这个站点上),做他希望的任何修改,点击 Submit,服务器会把这个表单数据作为合法通信流接收。

  首先可能考虑检查 $_SERVER['HTTP_REFERER'],从而判断请求是否来自自己的服务器,这种方法可以挡住大多数恶意用户,但是挡不住最高明的黑客。这些人足够聪明,能够篡改头部中的引用者信息,使表单的远程副本看起来像是从您的服务器提交的。

  处理远程表单提交更好的方式是,根据一个惟一的字符串或时间戳生成一个令牌,并将这个令牌放在会话变量和表单中。提交表单之后,检查两个令牌是否匹配。如果不匹配,就知道有人试图从表单的远程副本发送数据。

  要创建随机的令牌,可以使用 PHP 内置的 md5()、uniqid() 和 rand() 函数,如下所示:

  清单 18. 防御远程表单提交

以下为引用的内容:
로그인 후 복사
로그인 후 복사
로그인 후 복사
<?php 
로그인 후 복사
로그인 후 복사
로그인 후 복사
session_start();
로그인 후 복사
if ($_POST['submit'] == "go"){    
로그인 후 복사
로그인 후 복사
//check token    
로그인 후 복사
if ($_POST['token'] == $_SESSION['token']){        
로그인 후 복사
//strip_tags        
로그인 후 복사
$name = strip_tags($_POST['name']);        
로그인 후 복사
$name = substr($name,0,40);        
로그인 후 복사
//clean out any potential hexadecimal characters        
로그인 후 복사
$name = cleanHex($name);        
로그인 후 복사
//continue processing....    
로그인 후 복사
}else{        
로그인 후 복사
//stop all processing! remote form posting attempt!    
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
$token = md5(uniqid(rand(), true));
로그인 후 복사
$_SESSION['token']= $token;
로그인 후 복사
function cleanHex($input){    
로그인 후 복사
로그인 후 복사
$clean = preg_replace("![\][xX]([A-Fa-f0-9]{1,3})!", "",$input);    
로그인 후 복사
로그인 후 복사
return $clean;
로그인 후 복사
로그인 후 복사
}
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
?>
로그인 후 복사
로그인 후 복사
로그인 후 복사
 
로그인 후 복사
로그인 후 복사
로그인 후 복사

  这种技术是有效的,这是因为在 PHP 中会话数据无法在服务器之间迁移。即使有人获得了您的 PHP 源代码,将它转移到自己的服务器上,并向您的服务器提交信息,您的服务器接收的也只是空的或畸形的会话令牌和原来提供的表单令牌。它们不匹配,远程表单提交就失败了。

  [1] [2] [3] [4] 

确保PHP安全 不能违反的四条安全规则

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

See all articles