2010-12-09 4 views
1

내 GET 변수 중 하나는 URL을 엉망으로 만들 수있는 모든 문자를 허용합니다. 문제는 태그가 스크립트에 전달되어 html로 표시된다는 것을 의미합니다. 특히 mysql db에서 SELECT를 실행하는 데 사용되기 때문에 특히 그렇다.GET 문자열의 유효성을 검사하지만 여전히 특수 문자를 사용합니까?

그래서 내가 지금 사용하고 무엇을 (아래) 어떤 태그

$getstring = preg_replace("/(<\/?)(\w+)([^>]*>)/e","", $getstring); 

이 충분한가를 제거합니다 또는 거기에 내가보고 싶었어요 간극 큰 구멍입니다 함께 해시 preg_replace이다인가? 사용

+0

문자를 삭제하거나 탈출 하시겠습니까? – tHeSiD

+0

'strip_tags'는 어떨까요? http://pt2.php.net/manual/en/function.strip-tags.php – acm

+0

strip_tags !!! 그 하나, 얼마나 당황 스럽네요 :) 좋은 전화 잊어 버렸습니다! – Taylor

답변

2

htmlspecialchars()에 특수 문자가 표시 될 수 있습니다. HTML 태그는 일반 텍스트 (예 : 이스케이프 됨)로 표시되므로 시간이 너무 오래 걸리면 시도한 내용을 볼 수 있습니다. 그 후에 일부 태그를 필터링하려면 이전 시도를 사용하십시오.

일부 서식을 허용하려면 화이트리스트에 strip_tags을 사용하여 일부 기본 태그를 허용하십시오. 또는 Markdown (여기에서 사용) 또는 ReMarkable과 같은 마크 업 언어가 사용자의 기술 수준에 따라 유용 할 수 있습니다.

마치 SQL 인젝션 (SQL Injection)에 취약한 것처럼 들립니다. 가능하다면 mysqli (질문에 mysql-query 태그가 있음) 또는 PDO를 사용하여 매개 변수화 된 쿼리를 사용해야합니다. PDO::prepare()이 작업 속도를 높여 줄 것입니다.

+0

정확하게 이해하면, 그는 태그를 유지하고 strip_tags가 그것을 자르지 않고 표시하기를 원합니다. prepare(), 좋은 점에 관해서! – Catalin

+0

@Catalin : Taylor의 정규식은 태그를 빈 문자열로 바꿉니다. 그게 어떻게 그들을 지키기에 도움이되는지 나는 모르겠다. –

+0

사실, 관심을 기울이지 않고 있었는데, – Catalin

관련 문제