2011-10-04 6 views
1

안녕하세요, 사용자가 코드 (PHP, 자바, 자바 스크립트 C++ 등)의 일부를 제출할 수 있도록 할 계획입니다.php에서 대체 할 코드를 사용자가 제출할 수있게 하시겠습니까?

누구나 내 사이트의 안전을 위해 최선의 방법을 제안 할 수 있습니까? :))

나는 PHP에서 한 번 이스케이프 할 태그/문자/문자열이 코드 문자열을 제출했음을 의미합니까?

+0

해당 코드로 무엇을 하시겠습니까? 너 그걸 갈거야? – kapa

+0

전시 ... 미안 : P – sbaaaang

답변

1

검색어에 자리 표시자를 사용하면 입력을 이스케이프 처리 할 필요가 없습니다. 자리 표시 자, 바인딩 및 준비된 문이 가장 선호되는 방법입니다.

핸들을 다시 사용하고 입력을 변경하면 쿼리가 1 회 이상 빠르면 빠릅니다.

더 안전합니다. 문자열은 쿼리로 해석되지 않습니다. 당신이 저장하는 것은 당신이 얻는 것입니다.

내가 여기에 관련 예제를 제공하기 위해 대상 SQL에 대해 좀 더 알고해야하지만 것 몇 가지 링크입니다 :

PDO 스타일 바인딩 : http://docs.php.net/pdo.prepared-statements

MySqli 스타일 바인딩 : http://docs.php.net/manual/en/mysqli-stmt.bind-param.php

언제 다시 읽으십시오.

htmlspecialchars($string, ENT_QUOTES); 

ENT_QUOTES 옵션을 사용하면 단일 및 이중 otes가 이스케이프됩니다.

+0

미안 내가 어쨌든 내가 정말 좋은 감사를 확인 Mongo DB를 – sbaaaang

+0

사용하고 깜빡 :)) – sbaaaang

7

코드를 화면에 표시하려는 경우 데이터베이스에 저장하기 전에 이스케이프하거나 바꾸지 않아도됩니다 (저장하려는 경우). 물론 이것은 mysql_real_escape_string()과 같은 데이터베이스 삽입 (예 : RDBMS의 동등한 위생 처리 루틴)을 피하는 데는 적용되지 않습니다. 그 단계는 여전히 절대적으로 필요합니다.

  1. 당신은 eval() 또는 시스템 호출을 통해 제출 된 코드를 평가하지 마십시오 : 코드를 표시 할 때

    , 그냥 있는지 확인합니다.

  2. 브라우저에 코드를 다시 표시하려면 htmlspecialchars()으로 이스케이프 처리하십시오. 이스케이프 처리하지 않고 표시하거나 크로스 사이트 스크립팅 취약점을 소개합니다.

1

자동으로 실행하지 않으려는 경우 (보통의 mysql 위생 조치 제외) 어떤 것도 이스케이프 처리 할 필요가 없습니다.

1

저는 전문가가 아닙니다 (어제에 대해서만 들었습니다), 적어도 HTML에서는 htmlentities (this)를 사용해 볼 수 있습니다. htmlentities를 사용하여 무언가가 변환되면 일반 텍스트가됩니다. 따라서 브라우저에서 열면 태그 나 모든 것을 볼 수 있습니다 (예 : <a href="blah blah">). 로그에 쓰거나 다른 것으로 열면 엽니 다. 텍스트 기반 편집기에서 html 엔티티를 나타내는 기호 및 shnaz가 표시됩니다.

변환해야 할 경우 html_entity_decode 함수를 사용할 수는 있지만 추측을 베팅하고 변환 할 필요가 없다고 가정합니다.

다른 언어의 경우 무엇을해야하는지 잘 모릅니다.

관련 문제