PHP 보안 - 출력 이스케이프

黄舟
풀어 주다: 2023-03-05 22:18:01
원래의
1467명이 탐색했습니다.



출력 탈출

웹 애플리케이션 보안의 또 다른 기본은 원래 의미가 변경되지 않도록 출력을 이스케이프하거나 특수 문자를 인코딩하는 것입니다. 예를 들어, O'Reilly는 MySQL 데이터베이스로 전송되기 전에 O'Reilly로 이스케이프되어야 합니다. 작은따옴표 앞의 백슬래시는 작은따옴표가 원래 의미가 아닌 데이터 자체의 일부임을 의미합니다.

제가 말하는 출력 이스케이프는 세 단계로 나누어집니다.

l 출력 인식

l                                                                                                                                            이스케이프된 데이터와 이스케이프되지 않은 데이터를 구별할 수 있습니다 🎜> 필터링된 데이터만 이스케이프해야 합니다. 이스케이프는 많은 일반적인 보안 취약점을 방지하지만 입력 필터링을 대체할 수는 없습니다. 오염된 데이터를 먼저 필터링한 다음 이스케이프해야 합니다.

출력을 이스케이프하는 경우 먼저 출력을 식별해야 합니다. 이는 수행하는 작업에 따라 달라지므로 입력을 인식하는 것보다 훨씬 간단한 경우가 많습니다. 예를 들어 클라이언트 출력을 인식할 때 코드에서 다음 문을 찾을 수 있습니다.

echo
print
printf
<?=
로그인 후 복사

애플리케이션 개발자라면 외부 시스템으로 출력하는 모든 곳을 알아야 합니다. 그것들은 출력을 구성합니다.

필터링과 마찬가지로 탈출 과정도 상황에 따라 달라진다. 필터링은 데이터 유형에 따라 다르게 수행되며 이스케이프는 정보를 전송하는 시스템에 따라 다르게 수행됩니다.

클라이언트, 데이터베이스 및 URL을 포함하여 일부 일반적인 출력 대상을 이스케이프하기 위해 PHP에서 사용할 수 있는 내장 함수가 있습니다. 자신만의 알고리즘을 작성하려면 실수를 방지하는 것이 중요합니다. 데이터가 번역되기보다는 보존되도록 하려면 외국 시스템의 특수 문자에 대한 신뢰할 수 있고 완전한 목록과 해당 문자가 어떻게 표시되는지 찾아야 합니다.

가장 일반적인 출력 대상은 htmlentities( )은 데이터를 보내기 전에 데이터를 이스케이프하는 가장 좋은 방법입니다. 다른 문자열 함수와 마찬가지로 입력은 처리되어 출력되는 문자열입니다. 하지만 htmlentities를 사용하면( ) 함수는 두 개의 선택적 매개변수, 즉 따옴표를 이스케이프하는 방법(두 번째 매개변수)과 문자 세트(세 번째 매개변수)를 지정하는 것입니다. 따옴표의 이스케이프 방법은 ENT_QUOTES로 지정해야 합니다. 작은따옴표와 큰따옴표를 동시에 이스케이프하는 것이 가장 철저합니다.

데이터가 이스케이프되었는지 여부를 구별하기 위해 이름 지정 메커니즘을 정의하는 것이 좋습니다. 클라이언트에 대한 이스케이프된 데이터 출력의 경우 저장을 위해 $html 배열을 사용합니다. 데이터는 필터링되고 이스케이프된 모든 데이터를 저장하기 위해 먼저 빈 배열로 초기화됩니다.

코드:

아아앙

htmlspecialchars() 함수 및 htmlentities( ) 함수는 기본적으로 동일하며, htmlentities()의 이스케이프가 더 철저하다는 점을 제외하면 해당 매개변수 정의도 정확히 동일합니다.

$html['username']을 통해 클라이언트에 사용자 이름을 출력하면 브라우저에서 특수 문자를 잘못 해석하지 않도록 할 수 있습니다. 사용자 이름에 문자와 숫자만 포함된 경우 실제로는 이스케이프가 필요하지 않지만 이는 심층 방어 원칙을 반영합니다. 출력을 이스케이프 처리하는 것은 매우 좋은 습관이며 소프트웨어 보안을 극적으로 향상시킬 수 있습니다.

또 다른 일반적인 출력 대상은 데이터베이스입니다. 가능하다면 PHP의 내장 함수를 사용하여 SQL 문의 데이터를 이스케이프해야 합니다. MySQL 사용자의 경우 가장 좋은 이스케이프 함수는 mysql_real_escape_string( ). 사용 중인 데이터베이스에 PHP 내장 이스케이프 기능이 없으면 addlashes()가 최후의 수단입니다.

다음 예에서는 MySQL 데이터베이스의 올바른 이스케이프 기술을 보여줍니다.

CODE:

<?php
 
  $mysql = array(  );
  $mysql[&#39;username&#39;] =
mysql_real_escape_string($clean[&#39;username&#39;]);
  $sql = "SELECT *
          FROM   profile
          WHERE  username =
&#39;{$mysql[&#39;username&#39;]}&#39;";
  $result = mysql_query($sql);
 
  ?>
로그인 후 복사

以上就是PHP安全-输出转义的内容,更多相关内容请关注PHP中文网(www.php.cn)!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿