2014-09-21 7 views
0

WordPress 용 광고 관리자 플러그인을 작성하면 광고 코드가 좋은 코드에서부터 더러운 것, 심지어 악조건까지 거의 모든 것이 될 수 있습니다.코드 내용에 addslashes() 및 stripslashes()를 사용하는 것이 안전합니까?

내가 좋아하는 간단한 위생을 사용하고 있습니다 : 볼 때

$get_content = '<script>/*code to destroy the site*/</script>'; 
//insert into db 
$sanitized_code = addslashes($get_content); 

: 나는 그들의 성능이 조금 느린 배운 내가 base64_encode()base64_decode()을 피할 수있어

$fetched_data = /*slashed code*/; 
//show as it's inserted 
echo stripslashes($fetched_data); 

.

충분합니까?
그렇지 않은 경우 잘못된 광고 코드를 사용하여 악의적 인 공격으로부터 사이트 및/또는 DB를 보호해야하는 이유는 무엇입니까?

나는 왜 당신이 제안을했는지에 대한 설명을 듣고 싶습니다. 앞으로 나에게 맞는 것을 결정하는 데 도움이 될 것입니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

4

addslashes 다음 removeslashes은 왕복입니다. 원본 문자열이 제출 된 그대로 정확하게 전달되므로 아무 것도 보호하지 못합니다. '<script>/*code to destroy the site*/</script>'은 귀하의 웹 페이지에있는 그대로 출력되어 귀하의 웹 페이지 보안 컨텍스트에서 광고주가 원하는대로 할 수 있습니다.

일반적으로 제출 된 콘텐츠를 웹 페이지에 포함 할 때는 htmlspecialchars을 사용해야 모든 것이 일반 텍스트로 나오고 <은 적은 기호를 의미합니다.

광고주가 <script>과 같은 마크 업을 포함 할 수는 있지만 위험하지 않은 구문을 포함 시키려면 HTML을 구문 분석해야하며 알고있는 태그와 속성 만 허용하면됩니다. 이것은 복잡하고 어렵습니다. 기존 라이브러리 (예 : HTMLPurifier)를 사용하십시오.

광고주가 스크립트에 마크 업을 포함 할 수있게하려면 다른 도메인 이름에서 게재 된 iframe에 삽입해야합니다. 따라서 자신의 페이지에있는 태그를 터치 할 수 없습니다. 광고는 일반적으로 이러한 방식으로 수행됩니다.

addslashes으로 무엇을하고 싶은지 잘 모르겠습니다. 특정 주입 컨텍스트에 대해 올바른 형태의 이스케이프가 아니며 어려운 문자도 제거하지 않습니다. 그것을 사용할 이유가 거의 없습니다.

문자열 내용을 사용하여 해당 내용을 포함하는 SQL 쿼리를 작성한 다음 중지하면이 작업을 수행하는 적절한 방법이 아니며 문자열을 mangling 할 수도 있습니다. 매개 변수가있는 쿼리를 사용하여 데이터를 데이터베이스에 저장합니다. (실제로 할 수 없다면 올바른 문자열 리터럴 이스케이프 함수는 mysql_real_escape_string 또는 다른 데이터베이스에 대해 비슷한 이름의 함수가됩니다.)

+0

불투명합니다. 나는 결코 그런 생각을하지 못했다 : * addslashes 다음에 addslashes는 왕복이다. *, 실제로는 사실이다. 해로운 스크립트는 저장 될 때 db에 대해 위협이 아니지만 DB에 대해 시각적 인 끝에서 실행될 때 위협이되지 않는다. . 아주 좋은 대답과 방향. 고마워. –

+0

BTW'mysql_real_escape_string'은 더 이상 사용되지 않습니다. : –

+0

'mysql_real_escape_string'이 더 이상 사용되지 않을 것이라고 생각하지 않습니다 : http://us1.php.net/manual/fa/function.mysql-real-escape-string.php – Claude