2012-01-11 1 views
1

ColdFusion9 쿼리 코드를 ms 액세스 2003에서 mySql으로 마이 그 레이션하고 있습니다. 내 MySQL의 지식은 제한되어 있습니다, 그래서 이것은, 내가 간단한 cfqueries을 사용하는 초보자의 질문 : 내 MS 액세스 코드에서mysql에 대한 ms 액세스 마이 그 레이션 - 초보자 용 CF 코딩 변경

입니다 ... 여기 예입니다 : 나는 온라인 독서에서 이해

<cfquery name="catalog" datasource="mydatasource"> 
SELECT TableID, DateListed, FirstColor, SecondColor 
FROM mytable 
WHERE FirstColor='blue' OR SecondColor='blue' 
ORDER BY DateListed DESC 
</cfquery> 

하나 개 필요 cfqueryparam을 mySql과 함께 사용하여 주입 된 악성 코드로부터 보호합니다. 악의적 인 코드가 어떻게 주입되는지 모르겠습니다 ... 온라인 웹 사이트 사용자가 양식을 통해 데이터베이스와 상호 작용하지 않기 때문에 cfqueryparam을 사용해야합니까?

위와 같은 코드에 cfqueryparam을 추가하는 방법을 보여줄 수 있습니까? - 또는 - mySql 코드 작성을위한 좋은 방법을 제안합니다 (온라인 검색에서 대부분의 코딩 정보는 내가 가지고있는 것보다 높은 수준의 지식을 전제로합니다)

+0

가능한 모든 사용자 제공 값과 상호 작용하지 않는 데이터베이스 기반 웹 응용 프로그램은 매우 드문 경우입니다. 사용자가 제공 한 값 (URL 매개 변수, 양식 필드 등)과 상호 작용하는 모든 쿼리는 위험합니다. – Leigh

+0

좋습니다. 알겠습니다. 필자는 독서를 통해 모든 데이터베이스 쿼리를 보호해야한다고 생각했습니다. – Betsy

+0

아니요, 사용자가 제공 한 매개 변수 나 정보가 포함 된 쿼리 만 악용 될 수 있습니다. 위와 같이 하드 코딩 된 문자열 만 * 포함하는 쿼리는 안전합니다. – Leigh

답변

2

SQL 주입으로부터 보호하는 것 외에도 CFQUERYPARAM을 사용하면 바인드 변수를 사용하면 일부 변수를 제외하고 같은 쿼리가 한 번만 컴파일되고 캐시 될 수 있기 때문에 성능이 향상 될 수 있습니다. 샘플에서

, 이것은 당신이 CFQUERYPARAM을 사용하는 것입니다 방법은 다음과 같습니다 그러나, 많이 구입하지 않는

<cfquery name="catalog" datasource="mydatasource"> 
SELECT TableID, DateListed, FirstColor, SecondColor 
FROM mytable 
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue"> 
    OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="blue"> 
ORDER BY DateListed DESC 
</cfquery> 

. 보수는이 같은 상황에 있습니다

<cfquery name="catalog" datasource="mydatasource"> 
SELECT TableID, DateListed, FirstColor, SecondColor 
FROM mytable 
WHERE FirstColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#"> 
    OR SecondColor=<cfqueryparam cfsqltype="cf_sql_varchar" value="#form.color#"> 
ORDER BY DateListed DESC 
</cfquery> 

지금은 색이 쿼리는 데이터베이스에 컴파일 빠른 후속 호출에있을 것입니다 청색 또는 적색 또는 연두색인지. 또한 악의적 인 사용자가 form.color의 값을 blue';drop table users;으로 변경할 수 있으며 SQL 인젝션으로부터 보호받을 수 있습니다.

+0

알, 정말 고마워요 - 첫 번째 샘플 코드에서 어디를 가나 두 번째로 나를 잃어 버렸습니다. :) 빠른 캐싱을 위해 데이터베이스를 최적화하고 싶지만 이해가 안됩니다. 귀하의 "양식 사용.color "-이 예제가 폼의 초기 존재를 가정하고"blue "가 출력 된 값이라고 가정 할 때 맞습니까? 그렇다면 나는 다음과 같습니다 :) – Betsy

+0

"form "은 ColdFusion에서 자동으로 생성 한 가변 범위입니다 HTML 양식이 제출되면 – ale

0

는 사용자의 주입 또는 다른 나쁜 의도에서 CFQUERYPARAM에게

1) 보안을 사용하려면 적어도 세 가지 이유가 있습니다.

2) 명시 적으로 유형을 명시하기 때문에 쿼리가 더 빨리 실행됩니다.

, 다른 언어 기능과 유사

$unsafe_variable = $_POST["user-input"]; 
$safe_variable = mysql_real_escape_string($unsafe_variable); 

우리는이 말을 그들의 코드를 가지고있는 CFC가 있습니다 (모든 DAO는 객체의 이상과 같은 예를 사용하는 등의 플러스 3) 그 그냥 좋은 생각, 데이터베이스에)

<cfqueryparam cfsqltype="CF_SQL_INTEGER" value=#arguments.assessmentID# /> 
<cfqueryparam cfsqltype="CF_SQL_CHAR" value='%#arguments.searchString#%' /> 
<cfqueryparam cfsqltype="CF_SQL_DATE" value=#arguments.assessmentDate# /> 

여기서 # arguments.varname #은 SQL이 포함 된 메소드로 전달되었습니다.

+0

설명에 감사드립니다. – Betsy