2010-03-29 8 views
1

이 SQL 쿼리는 $ _GET에서 가져온 post_title을 가져 왔습니다.이 mysql 쿼리를 어떻게 위생 처리합니까?

$ sql = "게시물 ID 선택 FROM posts.post_title = '5-design-web-colorful'";

위생 처리를 더 안전하게하는 가장 좋은 방법은 무엇입니까?

EDIT : (요청시) 특정 비공개 카테고리 (모든 비공개)와 모든 비공개 게스트를 숨기기 위해 작동하는 플러그인을 만들려고합니다. 나는 'pre_get_posts'와 'posts_selection'에 접속하여 admin, 그 회원, 다른 회원 및 guest의 특정 게시물 및 카테고리를 표시하는 방법을 제어 할 수 있습니다.

카테고리가 존재하지 않아야합니다. 프런트 엔드의 cat archive 페이지에는 표시 할 수 없습니다.

내가 알고있는 것은 그것이 게시물의 이름/제목을 어떻게 위생 시키는가를 묻는 질문의 원인과 관련이 없다는 것을 안다. 아무것도 더.

+0

그래서 _identifier_가 변경되지 않았 음을 확인하고 싶습니다. '$ wpdb-> posts.post_title' 열 이름 만이 유일한 "issue"인가, 아니면'$ wpdb-> posts'도 문제가 될 수 있습니까? – VolkerK

+0

VolkerK : 나는 '5-desain-web-colourful'(즉, post_title 필드의 가치)이 $ _GET에서 가져온 것을 의미하는 질문을 읽었습니다. 분명히 해줄 수 있니, justjoe? – Anonymoose

+0

@all : 죄송합니다, 이것은 WordPress의 쿼리입니다. 나는 그 SQL 처음 편집 할 것입니다 – justjoe

답변

3

MySQL을 사용한다고 가정하고 mysql_real_escape_string을 사용하십시오.

+1

삽입 한 문자열의 경우 : '... $ wpdb-> posts.post_title = ' ".mysql_real_escape_string ($ str)."'; " – Franz

3

이 질문에 직접 대답하지 않지만 더 나은 방법은 바인드 매개 변수를 사용하는 것입니다. 이것은이 카테고리의 모든 공격 경로로부터 당신을 보호합니다. 귀하의 예를 들어

http://php.net/manual/en/pdo.prepared-statements.php

http://www.php.net/manual/en/pdostatement.bindparam.php :

$sth = $dbh->prepare("select id from $wpdb->posts where $wpdb->posts.post_title = ?"); 
$sth->bindParam(1, $str); 
$sth->execute(); 

주의 : 이것은 $의 wpdb이 안전하다는 것을 가정!

+0

은 OP가 이것을 의미한다고 생각합니다. . – Josh

관련 문제