我对Google App Engine端点的安全性有疑问。我在数据存储区中有一个数据,我上传的数据应该只能从Android应用程序中读取。
我检索所有这样的数据:
Personendpoint.Builder endpointBuilder = new Personendpoint.Builder(
AndroidHttp.newCompatibleTransport(), new JacksonFactory(), null);
endpointBuilder = CloudEndpointUtils.updateBuilder(endpointBuilder);
CollectionResponsePerson result;
Personendpoint endpoint = endpointBuilder.build();
try {
result = endpoint.listPerson().execute();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
result = null;
}
在我的PersonEndpoint中,我有这个:
@Api(name = "personendpoint", namespace = @ApiNamespace(ownerDomain = "test.com", ownerName = "test.com", packagePath = "personmanagement"))
public class PersonEndpoint {
/**
* This method lists all the entities inserted in datastore.
* It uses HTTP GET method and paging support.
*
* @return A CollectionResponse class containing the list of all entities
* persisted and a cursor to the next page.
*/
@SuppressWarnings({ "unchecked", "unused" })
@ApiMethod(name = "listPerson")
public CollectionResponse<Person> listPerson(@Nullable @Named("cursor") String cursorString,
@Nullable @Named("limit") Integer limit)
{
...
}
与此类似,还有方法insertPerson
,removePerson
在这种情况下是危险的。攻击者可以轻松触发这些方法并从我的数据存储中删除数据。如何保护?
我想只允许用户从数据存储中获取数据。谢谢。
答案 0 :(得分:1)
我建议您保护端点with authentication using OAuth。除此之外,您有责任检查经过身份验证的用户的角色和权限,并过滤他将管理的数据作为任何其他Web应用程序。
答案 1 :(得分:0)
您可以在web.xml中轻松实施安全约束。
<security-constraint>
<web-resource-collection>
<web-resource-name>personmanagement</web-resource-name>
<url-pattern>/personmanagement/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
这将强制用户通过其Google帐户进行身份验证,以访问该网址:<role-name>*</role-name>
。如果您只希望应用管理员能够访问该URL(您可以在云控制台中添加管理员),则可以使用<role-name>admin</role-name>
。
请参阅文档:https://developers.google.com/appengine/docs/java/config/webxml?hl=fr#Security_and_Authentication