2011-08-11 6 views
3

웹 양식에서 사용자가 입력 한 문자열을 키 이름의 일부로 사용하고 싶습니다.key_name으로 사용자 입력을 사용하는 것이 안전합니까?

user_input = self.request.POST.get('foo') 
if user_input: 
    foo = db.get_or_insert(db.Key('Foo', user_input[:100], parent=my_parent)) 

안전합니까? 아니면 저가의 인코딩이나 해쉬를해야합니까? 그렇다면 어느 것입니까?

+0

if self.request.POST [ 'foo']가 존재하지 않습니다. 예외가 있습니다. –

+0

예제를 짧게하고 싶습니다. 물론 나는 인코딩, 길이 검사 및 기타 검증을 포함하여 실제 코드에서 다르게 수행합니다. 질문은 들어오는 문자열을 키로 사용하는 데 중점을 둡니다. – zengabor

답변

3

정크로 데이터베이스를 채우는 악의적 인 사용자가 신경 쓰지 않는 한 안전합니다. get_or_insert은 기존 항목을 덮어 쓰지 않고 새로운 항목을 추가합니다.

다른 유효성 검사를하지 않아도 UI에서나 수신 한 후에도 길이가 제한되어 있는지 확인하십시오. 그렇기 때문에 큰 키를 채울 수 없습니다. 데이터베이스를 신속하게 삭제하거나 앱을 다운시킬 수 있습니다.

편집 : 방금 합리적인 키인지 확인 했으니 까. 그럴 경우 예, 안전합니다.

사용자는 데이터베이스에 이미 어떤 키가 있는지 파악할 수 있습니다. 사용자가 제공 한 키에 응답하는 데 걸리는 시간을 기반으로하고 있으며 여전히 권한이 있는지 확인해야합니다 그들이 요청한 내용을 보거나 적은 수의 요청으로 제한하기 위해 생성하는 키에 연결된 모든 정보를 검색 할 수는 없습니다.

+0

자세한 답변을 주셔서 감사합니다. 나는 위의 모든 것을 고려할 것이다. – zengabor

+0

또한 모든 키 이름이 유효하지는 않습니다. 길이 제한 외에,'__'로 시작하고 끝나는 키 이름은 예약되어 있습니다 (예 :'__key__'). –

관련 문제