나는이 명령을 가지고
echo "<?php $x=$_GET['x']; echo $x;?>" > x.php
출력 파일 x.php는 다음과 같습니다.
<?php =['x']; echo ;?>
이것이 $ 변수와 관련이 있습니까? x 파일에서 올바른 PHP 코드를 얻으려면 ???를 어떻게 피해야 합니까?
답변1
귀하의 코드:
echo "<?php $x=$_GET['x']; echo $x;?>" > x.php
전달한 문자열은 echo
큰따옴표로 묶여 있으므로 쉘은 그 안에 있는 모든 쉘 변수를 확장하려고 시도합니다. 문자열에는 $x
(두 번) 및 이라는 두 개의 변수가 포함되어 있습니다 $_GET
. 이러한 변수에 할당된 값이 없으면 빈 문자열로 대체됩니다.
문자열을 있는 그대로 파일에 인쇄하려면 다음을 수행하십시오.
echo '<?php $x=$_GET['"'"'x'"'"']; echo $x;?>' >x.php
여기에 문자열을 넣었습니다.하나의인용 부호. 이렇게 하면 쉘이 쉘 변수로 보이는 것을 확장하려고 시도하는 것을 방지할 수 있습니다.
작은따옴표로 묶인 문자열에는 작은따옴표를 포함할 수 없으므로 작은따옴표는 특별한 방법으로 추가해야 합니다. 나는 "'"
문자열의 나머지 부분과 연결하여 (큰따옴표 작은따옴표)로 추가하기로 결정했습니다.
또는 $
문자열의 각 요소를 이스케이프합니다.
echo "<?php \$x=\$_GET['x']; echo \$x;?>" >x.php
세 번째 방법은 여기에 참조된 문서를 사용하는 것입니다.
cat <<'PHP_END' >x.php
<?php $x=$_GET['x']; echo $x;?>
PHP_END
이렇게 하면 쉘이 문자열을 올바르게 처리하도록 하기 위해 실제 문자열을 수정할 필요가 없으며 echo
삽입하려는 경우 일부 쉘 구현이 C 스타일 이스케이프 시퀀스 등을 사용하여 다른 작업을 수행할 수 있다는 점을 기억할 필요가 없습니다. PHP 코드에 추가하세요).