小编use*_*425的帖子

在服务器上存储API密钥

我有一个服务,每个用户都有一个API密钥.我需要存储密钥,以便它们可用于验证API请求.

如果我将密钥以明文形式存储在我的数据库中,我担心某人有权访问数据库,抓取所有明文api密钥,然后使用它们冒充他人(如果有人访问,可能会有更大的问题)尽管如此).

这与存储用户密码类似,您只需存储哈希并使用该密码进行验证 - 但是大多数API都允许您查看API密钥,这意味着它们需要以某种可恢复的方式存储.

这是最好的做法吗?

security api

18
推荐指数
1
解决办法
1万
查看次数

在我自己的应用程序中发送敏感意图额外的安全性?

我有一个要求输入用户名和密码的活动,然后在我的应用中启动另一个活动来完成用户注册.我想将用户名+密码作为意图附加内容发送到第二个活动.就像是:

Intent intent = new Intent(activity, SecondActivity.class);
intent.putExtra("u", username);
intent.putExtra("p", password);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我的清单定义了SecondActivity,如:

<activity
   android:name="com.me.SecondActivity"
   android:label="">
   <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value="com.me.FirstActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)

现在我对发送用户名+密码作为意图附加内容的安全性有疑问 - 是否有可能另一个应用程序拦截使用欺骗意图过滤器调用SecondActivity?除此之外,我想知道附加意图会发生什么,它们是否曾被操作系统持久存储到磁盘上?如果有的话,有人可能会在那里看他们.

谢谢

security android application-security

16
推荐指数
1
解决办法
3351
查看次数

获取棒棒糖的WebView版本号?

我有Lollipop,看到我们有一个单独的应用程序"android系统webview".有没有办法从我自己的使用WebView实例的应用程序中获取其版本号?

我想报告一些关于我的用户使用的版本的统计信息.

谢谢

android

16
推荐指数
3
解决办法
2万
查看次数

如何确定给定的请求是否正在运行?

我正在寻找我的网络层的改造.是否有任何方法可以判断特定异步请求是否在任何给定时刻运行?

例如,我想知道请求是否正在运行,以便我可以在不同时间更新用户界面.我可以通过保持变量跟踪状态来自己做这件事,但想知道库中是否已存在某些东西.

android asyncsocket retrofit

14
推荐指数
1
解决办法
1287
查看次数

何时使用X509EncodedKeySpec vs RSAPublicKeySpec?

我在文本文件中有证书,其内容如下:

-----BEGIN PUBLIC KEY-----
xxxx
xxxx
xxxx
-----END PUBLIC KEY-----
Run Code Online (Sandbox Code Playgroud)

我相信这是一个pem编码证书?所以我想现在加载它,我正在尝试以下方法:

X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(
    readFileToByteArray("keyfile"));
Run Code Online (Sandbox Code Playgroud)

但我得到一个InvalidKeySpecException.

如果我加载文件,切断开始/结束页眉/页脚,然后base64解码'xxxx'内容,我不会得到任何投诉:

String contents = readFileToString("keyfile");
contents = contents.replace("-----BEGIN PUBLIC KEY-----", "");
contents = contents.replace("-----END PUBLIC KEY-----", "");
byte[] prepared = Base64.decode(contents);

// ok.
X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(prepared);
Run Code Online (Sandbox Code Playgroud)

这是加载密钥文件的正确方法吗?我看到还有一个RSAPublicKeySpec类,根据名称,它似乎是我在这里感兴趣的东西.但我相信这只是为了生成证书,而不是阅读现有证书?

谢谢

java encryption public-key-encryption

7
推荐指数
1
解决办法
1万
查看次数

Android webview - 单行javascript注释导致Uncaught SyntaxError错误?

我试图将以下html作为字符串加载到webview中:

<html>
  <head>
    <script>
      function foo() {
        // test.
      }
    </script>
  </head>
  <body>
    <p>hi.</p>
  </body>
</html>

------------------------------

String content = readAboveContentIntoString();
WebView webview = ...;
webview.loadData(content, "text/html", "utf-8");
Run Code Online (Sandbox Code Playgroud)

我从webview控制台收到以下消息:

Uncaught SyntaxError: Unexpected end of input
Run Code Online (Sandbox Code Playgroud)

如果我删除"// test".评论,我没有得到语法错误.这就好像webview正在剥离换行符,因此函数体将注释应用于右括号,如下所示:

function foo() { // test. }
Run Code Online (Sandbox Code Playgroud)

其他人可以重复这个吗?我想也许我的readAboveContentIntoString()正在剥离换行符,但是经过测试但事实并非如此.我正在使用android 4.4.4.

谢谢

- 编辑---

此外,块注释可以替代行注释:

/* test. */
Run Code Online (Sandbox Code Playgroud)

android webview android-webview

7
推荐指数
1
解决办法
1115
查看次数

如果没有明确关闭,ResultSet会泄漏吗?

我正在使用与jetty的jdbc连接池,在服务器实例上进行了这种设置,一年多没有问题.我已经切换到新的ubuntu服务器,并且内存不足.我正在分析内存使用情况并查看以下顶级实例:

java.util.Hashtable$Entry (33%)
com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty (13%)
com.mysql.jdbc.ConnectionPropertiesImpl$StringConnectionProperty (3%)
com.mysql.jdbc.ConnectionPropertiesImpl$IntegerConnectionProperty (3%)
Run Code Online (Sandbox Code Playgroud)

我没有明确关闭我的ResultSet实例,我正在做类似的事情:

Connection conn = null;
PreparedStatement stmt = null;
try {
    conn = ...;
    stmt = ...;
    ResultSet rs = ...;
    rs.useIt();
}
finally {
    if (stmt != null) { stmt.close(); }
    if (conn != null) { conn.close(); }
}
Run Code Online (Sandbox Code Playgroud)

文档说,语句将在关闭时关闭相关的ResultSet实例 - 这个ubuntu机器上的jdbc实现是否可能实际上没有这样做?我没有对我的代码(一个打包的.war文件)进行任何更改,我只是把它放到这个ubuntu机器上的一个jetty实例中.

分析显示那些com.mysql.jdbc.ConnectionPropertiesImpl实例继续增长,所以猜测这可能是正在发生的事情.

我只是想在我离开之前检查并修改我的所有代码以显式关闭ResultSet实例.看看MySql Workbench,我在Client Connections视图中看不到任何异常 - 我的应用程序连接进来并且似乎已经清理好了.

谢谢

--------------------更新--------------------

我已经更改了所有ResultSet实例,以便立即关闭它们以及finally {}块,就像我的Connection和PreparedStatement实例一样.这似乎没有帮助,但内存不断增长.

再看一些,我注意到了这个课程:

com.mysql.jdbc.JDBC4Connection
Run Code Online (Sandbox Code Playgroud)

并且实例的数量永远不会减少.大约10分钟的运行时间后,我看到几乎5k个实例(yikes?).

这篇文章看起来与我遇到的非常相似:

JDBC4Connection中的内存泄漏

OP最后说:

ORM依赖于在终结器中关闭与空闲资源的连接(有时会关闭结果集和语句),但是池保持连接打开几个小时,如果出现任何峰值,则会导致OOM.

我不明白这意味着什么,或者如何解决这个问题.我很确定我现在到处都在关闭我的资源(否则当我在其他Windows服务器上运行相同的webapp时,我可能也看到了那里的泄漏?).

--------------------更新--------------------

仍然看到相同的行为,这是我在我处理的每个请求中打开数据库连接的方式(省略错误检查):

 public class DsHelper {
    private static DsHelper sInstance; …
Run Code Online (Sandbox Code Playgroud)

java mysql jdbc resultset

6
推荐指数
1
解决办法
3637
查看次数

PagerTabStrip - 显示屏幕上的所有标签,就像普通的操作栏标签实施一样?

我在ViewPager中使用PagerTabStrip:

<android.support.v4.view.ViewPager>
    <android.support.v4.view.PagerTabStrip />
</android.support.v4.view.ViewPager>
Run Code Online (Sandbox Code Playgroud)

似乎PagerTabStrip的样式与您在操作栏中使用的选项卡小部件不同,因为选项卡位置不固定.有没有办法强制定位/造型?

我的寻呼机只有两个标签,看起来真的很傻,一次看不到两个标签.

谢谢

android

6
推荐指数
1
解决办法
2436
查看次数

JSoup - 输出为 utf-8 时保留 html 实体?

我想在使用 JSoup 时保留 html 实体。这是来自网站的 utf-8 测试字符串:

String html = "<html><body>hello &#151; world</body></html>";

String parsed = Jsoup.parse(html).toString();
Run Code Online (Sandbox Code Playgroud)

如果以 utf-8 格式打印解析后的输出,则序列 — 看起来会转换为代码点值为 151 的字符。

有没有办法让 JSoup 在输出为 utf-8 时保留原始实体?如果我以ascii编码输出:

Document.OutputSettings settings = new Document.OutputSettings();
settings.charset(Charset.forName("ascii"));
Jsoup.parse(html).outputSettings(settings).toString();
Run Code Online (Sandbox Code Playgroud)

我去拿:

hello &#x97; world
Run Code Online (Sandbox Code Playgroud)

这就是我正在寻找的。

jsoup

6
推荐指数
1
解决办法
1131
查看次数

制作演员剪辑儿童形象

我想要一个绘制drawable的actor,但将其剪辑为actor的大小.我从Widget派生这个类,并使用一些硬编码值作为一个简单的测试:

public class MyWidget extends Widget {

    public MyWidget(Drawable drawable) {
        setDrawable(drawable);
        setSize(100, 100);
    }

    public void draw(Batch batch, float parentAlpha) {
        clipBegin(getX(), getY(), 20, 20);

        drawable.draw(batch, getX(), getY(), 500, 500);

        clipEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是没有执行剪裁,可绘制的溢出超出了actor的边界.如果重要的话,这个演员是表的一部分.我相信我错误地使用了clipBegin()/ clipEnd()方法.这样做的正确方法是什么?

谢谢

libgdx

5
推荐指数
1
解决办法
584
查看次数