[SQL] SQL 주입으로부터 보호
SQLSQL 주입으로부터 보호
나는 웹 사이트를 개발 그리고 난 연결 부분을 확보하기 위해 노력하고있어.
나는 addslashes는 SQL 주입을 중지 $ 로그인에 기능을 사용하지만 일부 친구들은 충분한 보안이 아니라 그 나에게 말했다. 그러나, 그들은 어떻게이 취약점을 악용하는 저를 보이지 않았다.
어떻게 / 당신이 암호를 해독 할 수 수 있습니까? 어떻게 고정 할 수 있습니까?
<?php
if ( isset($_POST) && (!empty($_POST['login'])) && (!empty($_POST['password'])) )
{
extract($_POST);
$sql = "SELECT pseudo, sex, city, pwd FROM auth WHERE pseudo = '".addslashes($login)."'";
$req = mysql_query($sql) or die('Erreur SQL');
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);
if ($password == $data['pwd'])
{
$loginOK = true;
}
}
}
?>
해결법
-
==============================
1.당신은 쿼리 문자열 입력 매개 변수를 이스케이프는 mysql_real_escape_string를 사용해야합니다. 살균 숫자 매개 변수에 캐스팅하고 위생적으로 식별자에 화이트리스트를 사용하여 유형입니다.
당신은 쿼리 문자열 입력 매개 변수를 이스케이프는 mysql_real_escape_string를 사용해야합니다. 살균 숫자 매개 변수에 캐스팅하고 위생적으로 식별자에 화이트리스트를 사용하여 유형입니다.
참조 PHP 페이지에서 로그인 형태 SQL 인젝션의 일례가있다.
더 나은 솔루션이 준비된 문을 사용하는 것입니다, 당신은 PDO 또는 mysqli를 사용하여이 작업을 수행 할 수 있습니다.
-
==============================
2.당신은 일반 텍스트로 암호를 저장하는! 그게 내가 하나를 보았다면 적 주요 보안 문제입니다. 그것에 대해 무엇을 할 수 있습니다 : 예를 들어 볼 때 적어도, 암호의 (사용자 별) 소금에 절인 해시를 사용 여기.
당신은 일반 텍스트로 암호를 저장하는! 그게 내가 하나를 보았다면 적 주요 보안 문제입니다. 그것에 대해 무엇을 할 수 있습니다 : 예를 들어 볼 때 적어도, 암호의 (사용자 별) 소금에 절인 해시를 사용 여기.
-
==============================
3.사용하다:
사용하다:
mysql_real_escape_string($inputToClean);
-
==============================
4.또 다른 입을 딱 벌리고있는 보안 구멍이있다 - 추출물. 이 전역 변수를 덮어 쓰게됩니다 것은, 몇 문자를 입력에서 당신을 저장하지만, 언급에 너무 많은 구멍을 열어 수 있습니다.
또 다른 입을 딱 벌리고있는 보안 구멍이있다 - 추출물. 이 전역 변수를 덮어 쓰게됩니다 것은, 몇 문자를 입력에서 당신을 저장하지만, 언급에 너무 많은 구멍을 열어 수 있습니다.
나는이 게시하면 어떻게됩니까?
$_POST { 'login' => 'Admin', 'loginOK' => 1 }
, $ loginOK는 == 이제 1이고, 내가 관리자로 로그인 할 수 있습니다 무엇을 추측.
슬픔의 자신을 저장을 많이 후, 그냥 대신 추출물 무서운 해킹에 의존, 사용하려는 변수를 사용합니다.
-
==============================
5.그렇다 addslashes ()이이 코드에서 발견 된 어떤 임의의 문제입니다의 사용에서 :
그렇다 addslashes ()이이 코드에서 발견 된 어떤 임의의 문제입니다의 사용에서 :
-
==============================
6.오히려 addslashes보다 당신이 mysql_real_escape_string를 사용해야합니다.
오히려 addslashes보다 당신이 mysql_real_escape_string를 사용해야합니다.
from https://stackoverflow.com/questions/4749588/protect-against-sql-injection by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 나는 하나 개의 SQL 쿼리의 SQL 서버 수 () 행을받을 수 있나요? (0) | 2020.06.16 |
---|---|
[SQL] 행 집합은 뒤로 스크롤을 지원하지 않습니다 (0) | 2020.06.16 |
[SQL] Class.forName을 (JDBC_DRIVER)는 더 이상 필요하지? (0) | 2020.06.16 |
[SQL] 어떻게 윈도우 함수에서 링 데이터 구조를 사용하는 (0) | 2020.06.16 |
[SQL] SQL의 기본값 설정은 MS Access에서 작동하지 (0) | 2020.06.16 |