현재 위치: > 최신 기사 목록> 익스플로잇 기능의 오용으로 인해 배열이 한계를 벗어나지 않도록하는 방법은 무엇입니까? 실용적인 솔루션 및 예방 기술

익스플로잇 기능의 오용으로 인해 배열이 한계를 벗어나지 않도록하는 방법은 무엇입니까? 실용적인 솔루션 및 예방 기술

gitbox 2025-07-12

1. exploit () 함수의 기본 사용

먼저, exploit () 함수의 기본 사용법을 검토하겠습니다.

 <span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$limit</span></span><span> = PHP_INT_MAX)
</span></span>
  • $ Delimiter : Delimiter로 사용되는 문자열

  • $ String : 분할 될 대상 문자열

  • $ 한도 : 선택적 매개 변수는 반환 된 배열 요소의 수를 제한합니다. 기본값은 php_int_max입니다. 즉, 모든 분할 요소를 반환합니다.

예를 들어:

 <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"apple,banana,orange"</span></span><span>;
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>

출력 결과는 다음과 같습니다.

 <span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [</span><span><span class="hljs-number">0</span></span><span>] =&gt; apple
    [</span><span><span class="hljs-number">1</span></span><span>] =&gt; banana
    [</span><span><span class="hljs-number">2</span></span><span>] =&gt; orange
)
</span></span>

매우 간단 해 보이지만 Exploit () 에 전달 된 매개 변수가 부적절하거나 반환 된 배열이 제대로 처리되지 않으면 알기 어려운 오류, 특히 배열 문제가 발생할 수 있습니다.


2. 배열 교차 경계의 잠재적 위험

exploit () 함수를 사용하는 경우 배열 외부의 문제는 일반적으로 다음과 같은 상황에 반영됩니다.

  1. 입력 문자열이 비어 있거나 분리기가 없습니다 <br> $ string 이 빈 문자열이거나 Delimiter가 문자열에 존재하지 않는 경우, exploit ()는 원래 문자열이 포함 된 배열을 반환합니다. 현재 프로그램이 존재하지 않는 배열 요소에 액세스하려고하면 배열 외부 오류가 발생합니다.

    예를 들어:

     <span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
    </span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
    </span><span><span class="hljs-comment">// 산출:Array([0] =&gt; '')</span></span><span>
    </span></span>

    $ array [1] 에 액세스하려고하면 오류가 발생합니다.

  2. 부적절한 $ 한계 매개 변수를 사용하십시오
    exploit ()를 사용하면 $ 한계 매개 변수로 제어되는 분할 배열 요소의 수를 지정할 수 있습니다. 지정된 $ 한계 값이 부적절한 경우 반환 된 배열 길이가 예상과 일치하지 않아 배열 문제가 발생할 수 있습니다.


3. 배열을 교차하는 경계를 피하기위한 일반적인 팁

exploit () 함수의 오용에 의해 배열이 교차되는 것을 피하기 위해 다음과 같은 효과적인 예방 조치를 취할 수 있습니다.

3.1. 구분자가 존재하는지 확인하십시오

exploit () 함수를 호출하기 전에 대상 문자열에 지정된 구분 기호가 포함되어 있는지 확인하십시오. 문자열에 분리기가 없으면 원래 문자열의 배열을 반환하십시오. 이것은 어레이 교차 경계의 문제를 효과적으로 피할 수 있습니다.

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$delimiter</span></span><span>) !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-variable">$str</span></span><span>]; </span><span><span class="hljs-comment">// 분리기가 없을 때,원래 문자열이 포함 된 배열을 반환합니다</span></span><span>
}
</span></span>

3.2. 합리적인 $ 한계 매개 변수를 설정하십시오

분할 배열을 특정 길이로 제한하려면 특정 요구에 따라 $ 한계 매개 변수를 합리적으로 설정할 수 있습니다. 배열 길이를 제한 할 필요가 없다면 기본 PHP_INT_MAX$ 한도를 설정하는 것이 좋습니다.

 <span><span><span class="hljs-variable">$limit</span></span><span> = </span><span><span class="hljs-number">3</span></span><span>; </span><span><span class="hljs-comment">// 분할 후 최대 요소 수를 설정하십시오</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>);
</span></span>

3.3. COUNT () 함수를 사용하여 배열 길이를 확인하십시오

분할 배열 요소에 액세스 할 때 먼저 COUNT () 함수를 사용하여 배열의 실제 길이를 확인하여 범위를 벗어난 요소에 액세스하지 마십시오.

 <span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">count</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>) &gt; </span><span><span class="hljs-number">2</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$array</span></span><span>[</span><span><span class="hljs-number">2</span></span><span>]; </span><span><span class="hljs-comment">// 배열 요소에 대한 안전한 액세스</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"배열 요소가 충분하지 않습니다"</span></span><span>;
}
</span></span>

3.4. 빈 () 함수를 사용하여 배열이 비어 있는지 확인하십시오.

배열이 비어 있으므로 오류를 피하려면 Empty () 함수를 사용하여 배열에 값이 있는지 확인할 수 있습니다.

 <span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>)) {
    </span><span><span class="hljs-comment">// 처리 어레이</span></span><span>
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"배열이 비어 있습니다"</span></span><span>;
}
</span></span>

4. 기타 고급 예방 기술

정기적 인 예방 기술 외에도 몇 가지 고급 방법을 사용하여 코드의 견고성을 향상시킬 수도 있습니다.

4.1. 사용자 정의 함수 캡슐화 expoit ()

Exploit ()의 반복 검사의 잠재적 위험을 피하기 위해 사용자 지정 기능으로 캡슐화 될 수 있으며 기능 내에서 필요한 검사 및 처리가 수행됩니다.

 <span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">safe_explode</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$delimiter</span></span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span> = PHP_INT_MAX) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>)) {
        </span><span><span class="hljs-keyword">return</span></span><span> [];
    }
    
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">strpos</span></span><span>(</span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$delimiter</span></span><span>) === </span><span><span class="hljs-literal">false</span></span><span>) {
        </span><span><span class="hljs-keyword">return</span></span><span> [</span><span><span class="hljs-variable">$string</span></span><span>];
    }
    
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">explode</span></span><span>(</span><span><span class="hljs-variable">$delimiter</span></span><span>, </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-variable">$limit</span></span><span>);
}

</span><span><span class="hljs-comment">// 사용자 정의를 사용하십시오 safe_explode 기능</span></span><span>
</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">safe_explode</span></span><span>(</span><span><span class="hljs-string">","</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span></span>

4.2. 정규 표현식 사용

일부 복잡한 문자열 세분화 요구 사항의 경우 일반 표현식은보다 유연한 솔루션을 제공합니다. Exploit () 대신 preg_split () 함수를 사용할 수 있으며 분할시 더 일치하는 규칙 및 옵션을 지원하여 잠재적 오류를 피할 수 있습니다.

 <span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-title function_ invoke__">preg_split</span></span><span>(</span><span><span class="hljs-string">"/,/"</span></span><span>, </span><span><span class="hljs-variable">$str</span></span><span>);
</span></span>