2013-06-21 4 views
0

우리가 유지 관리하는 IT 이외의 응용 프로그램에서 보안 문제를 해결해야합니다. Microsoft Access 프론트 엔드 (SQL Server 백엔드)에 있습니다.Microsoft Access SQL 삽입

SQL 삽입이 Microsoft Access 컨트롤의 RecordSource 또는 RowSource 속성을 통해 수행 될 수 있는지 아는 사람 있습니까? 내가

Me.SomeListBox.Recordsource = 'SELECT * FROM SomeTable WHERE SomeField = ''' & Me.txtSomeTextBox & '''.

에 목록 상자의 레코드 원본을 설정 한 경우 Microsoft는 내가 통해 Me.txtSomeTextBox 것을 실행해야하는지 그래서 궁금하네요 그 속성에 대한 예방에 내장되어 있거나하지 않은 경우 예를 들어, 잘 모르겠어요 청소 기능.

이것은 당연히 빠른 수정입니다 ... 올해 말에 응용 프로그램이 재 설계되어 Access (yay!)에서 마이그레이션 될 것입니다.

미리 감사드립니다.

+0

내 추천 : 액세스 프런트 엔드가 폐기 된 연도의 후반부 ("예!")까지 문제를 해결하면 문제가 해결됩니다. –

+0

그 취약한, txtSomeTextBox에'''를 넣고 무슨 일이 일어나는가를 보아라. –

+0

Gord, 그게 문제 야. 그들이 원하는 일이라 할지라도 .... 내가 Access에서 빠져 나올 때 쓸 수있는 자원이 낭비 될 것이다. :-) (잘하면 나는 모든 사람들의 팁을 사용하여 고통을 최소화 할 수있다.) – StoneJedi

답변

1

문자열 연결을 수행하는 경우 취약합니다.

+0

당신은 블랙리스트를 통해 사용자 텍스트를 실행하고 VBA가 대신 호출 할 수있는 매개 변수화 된 sprocs를 생성함으로써 가능한 가능성을 최소화하려고 노력했다. 그것은 내가 쓰레기 처리라고 생각한 것보다 더 많은 작업 이었지만 적어도 sprocs는 재 설계 응용 프로그램에서 재사용 가능하도록 설계되었습니다 :-) – StoneJedi

2

WHERE 조건에서 필드 이름의 명백한 사용을 제거하기 위해 VBA를 사용할 수 있습니다.

Sub btnLogin_OnClick() 

If instr(0, me.txtBox, someFieldName) > 0 Then 
     Msgbox("Foo Bar!") 
Else 
    Login 
End If 

End Sub