2014-06-19 2 views
2

REST를 통해 쿼리 할 때 쿼리 삽입 문제가 있는지 궁금합니다.REST를 통해 Cypher에 대한 "주입"문제가 발생했습니다

쿼리를 매개 변수화하면 명확하게 정리할 수 있지만 속성 및 레이블을 조작하기 위해 문자열 연결을 사용하여 쿼리 할 수도있었습니다.

나는 매개 변수의 패러다임을 따라 원하는 방식으로 쿼리 할 수 ​​없기 때문에 후자의 방식이 더 유연하다는 것을 알았습니다. (Can I parameterize labels and properties on CREATE or SET? (REST and transaction))

주입에 대한 걱정이 없다면 쿼리 문자열을 연결하는 것이 보안 위험입니까? 저는 개인적으로 Neo4j를 질의하는데 너무 깊은 이해를하지 않으므로 옵션을 공개하고 제안을 시도 할 의향이 있습니다.

편집 : Wes의 의견을 읽은 후. 시청자에게 게시 된 링크를 빠르게 훑어보고 싶습니다. Where and Set를 사용하려는 상황은 어떻습니까? 파라미터 화하는 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

1

누군가가 사용자의 쿼리를 알고 있다고 가정 할 때 가상의 상황이 있습니다. 사용자 입력을 받아 쿼리로를 연결할 경우이 문제가 발생할 수 있습니다

"MATCH (u:User) WHERE u.id = " + userId + " RETURN u" 

이의는의 사용자 ID를 해보자 :

"1 WITH count(1) AS dummy MATCH (u:User) OPTIONAL MATCH (u)-[r]-() DELETE u, r " 

내가 어떤 사람들은 더 나쁜 예와 함께 올 수있는 확신합니다 ..

이것은 매개 변수를 사용하여 즉시 해결됩니다. 입력을 위생적으로 정리할 수도 있지만 가능하면 안전한 방법을 택할 것입니다.

+0

감사합니다. 웨스! 나는 그 질문을 편집했다. 당신이 볼 수 있다면, 나는 그것을 크게 감사 할 것입니다. – KoalaD

+0

당신이하고있는 것에 대한 구체적인 예를 들어 줄 수 있습니까? 이것이 무슨 뜻인지는 확실치 않지만 WHERE 절 전체를 매개 변수화 할 수는 없습니다 ... 매개 변수는 절/하위 절이 아닌 표현식을 대체합니다. '1 + 2'를 삽입 할 수있는 곳이면 매개 변수로 대체 할 수 있습니다. –

관련 문제