IT

쿼리를 보낼 때 이스케이프해야 하는 것은 무엇입니까?

itgroup 2023. 7. 12. 23:42
반응형

쿼리를 보낼 때 이스케이프해야 하는 것은 무엇입니까?

SQL 쿼리를 실행할 때 문자열을 정리해야 합니다. 그렇지 않으면 사용자가 웹 사이트에서 악의적인 SQL을 실행할 수 있습니다.

저는 보통 다음과 같은 이스케이프_string(blah) 함수를 가지고 있습니다.

  • 이스케이프를 대체합니다(\) 이중 이스케이프(\\).
  • 작은 따옴표를 바꿉니다.') 이스케이프된 단일 따옴표(\').

이것으로 충분합니까?내 코드에 구멍이 있습니까?이것을 빠르고 안정적으로 할 수 있는 도서관이 있습니까?

펄, 자바, PHP로 우아한 솔루션을 보고 싶습니다.

최대한의 보안, 성능 및 정확성을 위해 준비된 문을 사용합니다.PHP를 포함한 다양한 언어로 된 많은 예제를 사용하여 이 작업을 수행하는 방법은 다음과 같습니다.

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

나는 또한 댓글을 피할 것입니다(더블 대시).

--

PHP에서 사용하기 좋은 것은 PDO입니다.SQL 및 일반적으로 모든 SQL 자료를 보호하는 데는 많은 추측이 필요합니다.준비된 문을 지원하므로 SQL 주입 공격을 방지하는 데 큰 도움이 됩니다.

PDO에 대한 훌륭한 입문서는 Davey Shafik 등의 PHP Anthology 101 Essential Tips, Ticks & Hacks 2nd Ed에 포함되어 있습니다.학습을 쉽게 할 수 있고 참조용으로 탁월합니다.저는 더 이상 실제 SQL Query 이외의 다른 것에 대해 생각할 필요가 없습니다.

자리 표시자와 함께 준비된 문을 사용하는 것이 좋습니다.PHP, .NET을 사용하고 계십니까? 어느 쪽이든, 준비된 문은 더 많은 보안을 제공할 것이지만, 샘플을 제공할 수 있습니다.

PHP에서 저는 이것을 사용하고 있으며, 그것에 대한 모든 의견에 감사하겠습니다.

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

필드가 NULL일 수 있는 경우 한 번 더 확인해야 합니다.

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

그것이 그것을 즐기는 것입니다! (게시물이 _가 아닌 밑줄을 올바르게 보내기를 바랍니다.

준비된/매개 변수화된 쿼리를 사용합니다!

준비된 문을 사용합니다.

MySQL 쿼리에서 LIKE를 사용할 때도 mysql_real_escape_string에 의해 이스케이프되지 않으므로 "_" 문자를 이스케이프해야 합니다.

참고로 여기를 확인하십시오.

MySQL C API 자체가 있습니다.mysql_escape_string()그것을 사용하거나 동등한 것을 사용하는 것이 가장 좋을 것입니다.

당신은 어떤 언어를 사용하고 있습니까?그들 대부분은 사용하기 더 좋을 SQL 이스케이프 기능이 내장되어 있는 것 같습니다.

예를 들어 PHP에는 mysql_real_escape_string이 있고 addslash가 있습니다.

MySQL이 매개 변수화된 쿼리를 지원하는지 확실하지 않습니다. 그렇다면 이 경로를 사용하도록 노력해야 합니다.이렇게 하면 사용자 입력이 악의적인 작업을 수행할 수 없게 됩니다.

그렇지 않으면 언급한 내용 외에 일부 "잘못된" 문자는 세미콜론(;) 및 주석(-- 및 /* */)이 됩니다.

언급URL : https://stackoverflow.com/questions/2688/what-do-i-need-to-escape-when-sending-a-query

반응형