나는 보통 다음과 같이하여 사용자 입력을 피할 수있다 :PHP : 사용자 입력이 "예방 접종 된"방법에 관한 조언
htmlspecialchars($str,ENT_QUOTES,"UTF-8");
그리고 mysql 연결이 가능할 때마다 mysql_real_escape_string($str)
.
어떻게 개선 할 수 있습니까? 나는 지금까지이 문제에 아무런 문제가 없었지만 그것에 대해 확신 할 수 없다.
고맙습니다.
나는 보통 다음과 같이하여 사용자 입력을 피할 수있다 :PHP : 사용자 입력이 "예방 접종 된"방법에 관한 조언
htmlspecialchars($str,ENT_QUOTES,"UTF-8");
그리고 mysql 연결이 가능할 때마다 mysql_real_escape_string($str)
.
어떻게 개선 할 수 있습니까? 나는 지금까지이 문제에 아무런 문제가 없었지만 그것에 대해 확신 할 수 없다.
고맙습니다.
는 스토리지 (살균)과 디스플레이를 위해 인코딩. 데이터는 이 아니어야합니다.은 저장 용으로 인코딩해야합니다. 원시 데이터 만 저장하려고합니다. 이스케이프 문자는 저장되지 않으므로 이스케이프 처리는 원시 데이터를 전혀 변경하지 않습니다. 원시 데이터와 명령 구문의 차이점을 올바르게 알리기 위해서만 사용됩니다. 한마디로
, 당신은 다음을 수행 할 :
또한 마법 따옴표를 사용하는 경우 사용자의 입력에서 슬래시를 제거해야 할 수도 있습니다$data = $_POST['raw data'];
//Shorthand used; you all know what a query looks like.
mysql_query("INSERT " . mysql_real_escape_string($data));
$show = mysql_query("SELECT ...");
echo htmlentities($show);
// Note that htmlentities() is usually overzealous.
// htmlspecialchars() is enough the majority of the time.
// You also don't have to use ENT_QUOTES unless you are using single
// quotes to delimit input (or someone please correct me on this).
. stripslashes()
이면 충분합니다.
당신이 char(5)
있는 DB 필드가 있다고 가정 : 다음과 같은 예를 들자면, 저장을 위해 인코딩하지해야하는 이유에 대해서는
. html 입력은 maxlength="5"
입니다. 사용자가 "& & & & &"이라고 입력하면 완전히 유효 할 수 있으며 "& &"으로 저장됩니다. 검색된 후 사용자에게 다시 표시 될 때 인코딩하지 않으면 "& &"이 표시되며 이는 올바르지 않습니다. 인코딩을하면 "& amp; &"으로 잘못 표시됩니다. 사용자가 저장하려는 데이터를 저장하지 않습니다. 원시 데이터를 저장해야합니다.
이것은 또한 사용자가 특수 문자를 저장하려는 경우 문제가됩니다. 이것들을 어떻게 보관합니까? 너는하지 않는다. 그대로 보관하십시오.
SQL 인젝션을 막으려면 적어도 최소한 mysql_real_escape_string
의 이스케이프 입력을 사용해야하지만 PDO와 같은 DB 래퍼와 함께 prepared statement를 사용하는 것이 좋습니다. 어떤 것이 가장 잘 작동하는지 파악하거나, 직접 작성하십시오 (그리고 철저히 테스트하십시오).
XSS (교차 사이트 스크립팅)로부터 보호하려면 사용자 입력을 다시 표시하기 전에 인코딩하십시오.
감사합니다, tandu. – Francisc
잘 설명! – Tech4Wilco
mysql_real_escape_string($str)
만을 사용하여 SQL 삽입을 피할 경우 항상을 쿼리에서 인용 부호로 묶어 확인하십시오.
안전하지 않은 출력을 화면에 구문 분석 할 때 htmlspecialchars를 사용해도됩니다.
고마워요, 웨슬리. – Francisc
* 사용자 입력은 * 사용 *되었을 때만 이스케이프해야하며 그 정확한 사용에 필요한 위생 방법 만 사용해야합니다. 관련 또는 속임수 : [PHP : 궁극적 인 깨끗한/보안 기능] (0120-13995) –
나는 그것을 읽을거야. 고맙습니다. – Francisc