LAMP 애플리케이션을 작성하기 시작한 이후로 나는 내 상자에 대한 관리 제어판을 개발하고 싶었습니다. (재미있고 교육적인 목적으로, 그렇지 않으면 이미 시장에 있는 것을 사용하겠습니다)
하지만 항상 나를 멈추게 하는 것은 exec() 함수(내가 아는 유일한 방법)가 나쁘다는 말을 항상 듣는 것입니다. "사용하지 마세요", "잘못된 코딩입니다" "등등.
이 목적을 위한 더 안전한 옵션에 대해 들어본 적이 없습니다. 따라서 내 질문은 다음과 같습니다.
당신은 있나요?
전용 웹 서버에서 애플리케이션을 실행하고 비밀번호로 보호된 문서 루트를 사용하는 것만으로도 충분하지 않나요?
글쎄, 이것은 내 질문입니다.
답변1
내 생각에 진짜 위험은 사용자의 입력을 다음 중 하나로 혼합하는 것입니다 exec()
. 사용자가 입력을 제공할 수 있으므로 대부분의 위험이 발생하는 곳입니다. 이를 CLI에 혼합하면 ;
텍스트 상자에 세미콜론( )을 삽입하고 입력 후 다른 명령을 실행하는 등 위험한 작업을 수행할 수 있습니다. 인수를 제공했습니다.
따라서 일반적으로 읽기 전용 모드에서 명령을 실행하는 것은 다른 작업을 수행하는 것보다 더 위험하지 않습니다.
이는 본질적으로 여러분에게 더 친숙한 SQL 주입 공격과 동일한 문제입니다.
답변2
내가 아는 한(나는 실제로 프로그래머가 아니므로 가볍게 받아들이십시오) exec()
호출은 전혀 나쁘지 않습니다. 단지 새로운 프로세스를 포크하고 시스템 기능을 호출하기 때문에 오버헤드가 높다는 것입니다. 일반적으로 사람들은 작성한 프로그램/스크립트에서 내부적으로 작업을 수행하고 exec()
.
그러나 목표가 시스템에서 명령을 실행하는 것이라면 그러한 호출 없이는 이를 수행할 수 없습니다. 물론 보안 위험이 있으며 임의의 사용자가 서버에서 임의의 명령을 실행하도록 허용하면 문제가 발생할 수 있습니다. 그러나 서버에 대한 접근이 엄격하게 제한되어 있는 경우에는 안전하게 접근할 수 있어야 합니다.
어쨌든, 주요 시사점은 exec()
기능이 본질적으로 나쁜 것이 아니라 내부적으로 무언가를 수행하는 것보다 효율성이 떨어진다는 것입니다.