2014-09-12 2 views
2

의 파일에서 값을 가져 오는 php url의 쿼리 문자열 비영리 사이트에 대해 php/mysql을 사용하지 않도록 설정해야합니다. 취약점이 많기 때문입니다. 소규모 사이트이므로 데이터베이스가없는 사이트를 다시 작성하고 관리자 페이지의 취약점을 우회하기를 원합니다.보안상의 이유로 디렉토리

웹 사이트는 생존하고 휴면 상태를 유지해야합니다. 앞으로 사이트를 계속 업데이트 할 필요가 없기 때문에 정적 인 디자인을 찾고 있습니다.

우리의 현재 URL 구조는 데이터베이스에서 값을 가져 오는 URL에 쿼리 문자열을 포함합니다.

artist.php? id = 2

나는 artist.php를 쉽고 빠르게 변경할 수 있도록 데이터베이스에서 값을 가져 오는 대신 플랫 html 파일의 데이터 만 포함하도록했습니다.

artist.php?id=1 = fetch data from /artist/1.html 
artist.php?id=2 = fetch data from /artist/2.html 
artist.php?id=3 = fetch data from /artist/3.html 
artist.php?id=4 = fetch data from /artist/4.html 
artist.php?id=5 = fetch data from /artist/5.html 

이렇게하는 이유는 SEO 목적으로 URL 구조를 보존해야하기 때문입니다. 그래서 나는 대중에게 html 파일을 사용하고 싶지 않다.

이 작업을 수행하는 데 필요한 기본 PHP 코드는 무엇입니까?

+0

당신의 artist.php에

// datafile.php return array( 1 => "Artist 1 is this and that", 2 => "Artist 2..." ) 

: 그리고 당신은 또한 작가의 배열 정보를 가질 수있다? 그렇다면 질문을 업데이트해야합니다 ("이 작업을 수행하는 데 필요한 기본 PHP 코드는 무엇입니까?") ^^ 그리고이를 달성하려면 htaccess를 사용할 수 있습니까? 예인 경우 - htaccess-rule을 사용하여 리디렉션을 수행 할 수 있습니다. –

+0

죄송합니다. 아마도 자신을 설명하는 좋은 일을하지 않았을 것입니다. 악성 코드 해커가 사이트를 해설하고 코드를 삽입하는 데 사용하는 소프트웨어/취약점의 취약점이 있습니다. 우리는 그것이 가장 위험한 관리 섹션이고 사이트에 코드를 삽입하는 것을 허용한다고 생각합니다. 제가 자원하는 비영리 단체는 프로그래머를 고용 할 예산이 없으므로 모든 방법을 표면에서 "작동"시키면서 모든 관리자 및 맬웨어 취약점을 제거하기 위해 제안 된 방법을 사용하려고합니다. –

답변

0

는이 같은 것 물어 정확히 그것을 수행합니다

$id = intval($_GET['id']); 
$page = file_get_contents("/artist/$id.html"); 

을 경우 $id === 0 일에 ere는 쿼리 매개 변수의 숫자 외에 다른 것이 었습니다. 난 당신이 PHP를 사용하지 않을 생각

$data = include('datafile.php'); 
if (array_key_exists($_GET['id'], $data)) { 
    $page = $data[$_GET['id']]; 
} else { 
    // 404 
} 
+0

대답 주셔서 감사합니다, 코드의 첫 번째 단락은 그 일을했다. 나는 PHP에 관해서는 알지 못한다. echo, vairables, php의 시작과 끝 태그에 대해 충분히 알고있다. 세 번째 줄에 echo $ page를 넣기 전에는 첫 번째 파라가 실제로 작동하지 않았습니다. –

+0

@AbdulKarim 도움이 되었다니 기쁩니다! 문제가 해결되면 답변을 수락하십시오. – Schlaus

0

HTML은 가장 좋은 옵션은 아니지만 그 사촌은 정적 데이터 파일에 가장 좋습니다.

XML을 소개하겠습니다! (문서는 PHP parser)

XML은 구조와 HTML이 비슷하지만 웹 페이지가 아닌 데이터를 저장하도록 만들어졌습니다. HTML 페이지가 이미 완료하고 당신은 당신이 당신의 웹 서버에서 URL 재 작성을 사용할 수를 제공 할 필요가 대신하는 경우

, 지난 순수 PHP를

을 (아파치를 사용하는 경우, mod_rewrite 참조) 솔루션 (내가 추천하지 않는)

<?php 

//protect from displaying unwanted webpages or other vulnerabilities: 
//we NEVER trust user input, and we NEVER use it directly without checking it up. 
$valid_ids = array(1,2,3,4,5 /*etc*/); 
if(in_array($_REQUEST['id'])){ 
    $id = $_REQUEST['id']; 
} else { 
    echo "missing artist!"; die; 
} 
//read the html file 
$html_page = file_get_contents("/artist/$id.html"); 

//display the html file 
echo $html_page; 
+0

해결책 주셔서 감사합니다. html 파일은 이미 작성되었으므로 지금 변경하기에는 너무 늦었습니다. 그러나 기여에 감사 드리며 Schlaus의 코드가 에코를 놓치고있는 것처럼 작동하지 않는 이유를 디버그하는 데 도움을주었습니다. –

+0

@AbdulKarim은 여러분에게 유용한 모든 대답을 upvote하고, 문제를 해결 한 대답을 받아들이는 것을 잊지 마십시오. 수락하기 전에 적어도 24 시간을 기다리는 것이 더 낫습니다. 왜냐하면 더 나은 답변을 받기 때문입니다. –

+0

덕분에 나는 당신의 대답을 모두 upvote하려고했지만 적어도 15 담당자를 njeed 말한다. –

관련 문제