쿼리를 보낼 때 이스케이프해야 하는 것은 무엇입니까?
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
'IT' 카테고리의 다른 글
교차 오리진 요청 차단됨:동일한 오리진 정책은 http://127.0.0.1:8000/api/task-list/의 원격 리소스를 읽을 수 없습니다. (0) | 2023.07.12 |
---|---|
변경된 파일 이름을 'git log'로만 표시하는 방법 (0) | 2023.07.12 |
&" 문자는 web.config에 저장된 암호를 해독합니다. (0) | 2023.07.12 |
gcc로 어셈블리에 컴파일하려면 어떻게 해야 합니까? (0) | 2023.07.12 |
"한 페이지에 모든 열 맞춤" 설정에 대한 파일을 설정하는 방법 (0) | 2023.07.12 |