Veracode Static Scan 보고서는 컨텐츠 공급자 구현에서 SQL 주입 취약점을 지적합니다.selectionArgs 배열에 전달 된 모든 변수를 삭제하는 방법은 무엇입니까?
이전에이 결함에 관한 모든 의문점과 관련하여 question을 게시했습니다.
그리고 몇 번의 토론을 거친 후에 보고서에서 오탐의 가능성이 있음을 알게되었습니다. 내가 조사하고 읽은 바에 따르면 안드로이드에서 언급 한 보안 가이드 라인 인 docs과 other referenced sources을 따르므로 SQL 삽입을 피하려고합니다.
SQL 쿼리에 전달 된 데이터에 대해 최소한 일부 입력 유효성 검사를 수행 할 수있는 제안이 곳곳에 있습니다. 결함 가능성이있는이 가능성을 다루고 싶습니다. 누구나 질의에 전달하기 전에 데이터를 살균하도록 요청하고 있습니다. 콘텐츠 공급자의 delete(), update() 메서드에 전달 된 selectionArgs 배열에 전달 된 변수를 정확하게 sanitize하려면 어떻게해야합니까?
DatabaseUtils.sqlEscapeString()이면 충분합니까? 제안 해주세요! 결함에
public Loader<Cursor> onCreateLoader(int id, Bundle b) {
switch (id) {
case THOUGHT_LOADER:
return new CursorLoader(getActivity(), NewsFeedTable.CONTENT_URI, NewsFeedTable.PROJECTION, NewsFeedTable._id + "=?", new String[]{tid}, null);
case COMMENT_LOADER:
return new CursorLoader(getActivity(), CommentTable.CONTENT_URI, CommentTable.PROJECTION, CommentTable.COLUMN_TID + "=?", new String[]{tid}, null);
default:
return null;
}
}
보고서 포인트 :
가 여기에 내가 변수를 소독하는 데 필요한 구현의는 SQL 명령에 사용되는 특수 요소의 부적절한 중화 ('SQL 인젝션') (CWEID 89) 이 줄에서
삭제됨 = db.delete (BulletinTable.TABLE_NAME, selection, selectionArgs); 아래의 코드에서 다음 selectionArgs
배열의
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
if (uri.equals(Contract.BASE_CONTENT_URI)) {
deleteDatabase();
return 1;
}
SQLiteDatabase db = openHelper.getWritableDatabase();
int deleted = 0;
switch (matcher.match(uri)) {
case BULLETIN:
deleted = db.delete(BulletinTable.TABLE_NAME, selection, selectionArgs);
break;
case CLASSROOMS:
deleted = db.delete(ClassroomsTable.TABLE_NAME, selection, selectionArgs);
break;
default:
throw new IllegalArgumentException("Unsupported URI: " + uri);
}
if (deleted > 0) {
getContext().getContentResolver().notifyChange(uri, null);
}
return deleted;
}
@CL, 질문에 문제가있는 지점을 코드 스 니펫에 추가했습니다. 특정 값에 대해 불평하지는 않지만이 결함이 발견 된 코드의 줄 번호와 결함 및 세부 권장 사항과 관련된 세부 정보 만 제공합니다. 콘텐츠 공급자 구현의 delete() 메서드입니다. 그 자리에서 이미지를 제거하고 코드를 추가했습니다. – Priya
두 코드가 서로 어떻게해야할까요?'delete'는 어디에서 호출 되었습니까? 그리고이 질문이 이전 질문과 중복되지 않는 이유는 무엇입니까? –
예, 두 가지 코드가 있습니다. 그들은 서로 아무 것도 할 필요가 없습니다. 첫 번째 코드 단편 : _ selectionArgs Array._ 에서 변수를 전달하는 방법을 구현을 보여줍니다. 두 번째 코드 단편 : _ 결함이있는 지점 _ 중복으로 표시 :이 질문은 중복으로 간주 될 수 있습니다. 데이터 sanitizing에 대한 또 다른 질문에 대한 대답을 얻으십시오. 그래서 나는 다른 질문을 만들 생각을했습니다. – Priya