我对 Android 编程相当陌生,所以这可能是一个简单的问题,但我还没有找到答案。 基本上,我正在调用需要 xml 的 C# Web 服务。我对发送未经过滤的用户输入持怀疑态度。有很多地方我必须这样做,但登录就是一个很好的例子:
这是我目前得到的一个粗略版本(从其他 SO 示例中拼凑而成):
String userName = "MyUserName";
String password= "MyPassword";
String url = "http://mywebserviceurl.com/auth;
String xml = "<AuthenticateModel xmlns=\"http://schemas.datacontract.org/2004/07/Mycompany.Auth.Lib\">\n" +
" <EmailAddress>" + userName + "</EmailAddress>\n" +
" <EncodedPassword>" + password + "</EncodedPassword>\n" +
"</AuthenticateModel>";
HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
StringEntity str = new StringEntity(xml);
str.setContentType("application/xml; charset=utf-8");
str.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/xml; charset=utf-8"));
post.setEntity(str);
HttpResponse httpResponse = httpclient.execute(post);
效果很好。用户信息在服务器端处理,但完全不过滤地发送它似乎是个坏主意。我很感激您的反馈。
此外:我将用户名存储在应用程序首选项中,因此我关心的不仅仅是 Web 服务。 谢谢!
最佳答案
看来此调用容易受到 XML Injection 的攻击,但这对攻击者来说也是无用的。
攻击者将直接访问此 C# Web 服务。没有人关心您的客户提出的请求。您需要确保服务正在保护其自身常见的漏洞,例如 SQL 注入(inject)、命令注入(inject)和目录遍历。
关于Web 服务调用的 Android 用户输入清理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9878704/