加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite – Chrome中加密的Cookie

发布时间:2020-12-12 19:10:32 所属栏目:百科 来源:网络整理
导读:我目前正在使用C#表单应用程序,需要访问我的电脑上的特定Cookie,我可以做得很好.以下是问题: Google将cookies存储在SQLite中,我已经下载了Sqlite数据库浏览器,以帮助我查看这些值.令我惊讶的是,大约一半的cookie值显示为空(包括我需要的),尽管它们显然不是.
我目前正在使用C#表单应用程序,需要访问我的电脑上的特定Cookie,我可以做得很好.以下是问题:

Google将cookies存储在SQLite中,我已经下载了Sqlite数据库浏览器,以帮助我查看这些值.令我惊讶的是,大约一半的cookie值显示为空(包括我需要的),尽管它们显然不是.

数据库文件位于:

C:Users%username%AppDataLocalGoogleChromeUser DataDefaultCookies

在Chrome上我有一个名为“编辑此Cookie”的插件,可以直接修改我所在网站上的Cookie.这个插件可以读取这些cookie,并且Web浏览器可以在需要不同请求时通过HTTP解析值,所以它们绝对存在 – 仍然是SQLite浏览器,我的自定义代码都得出结论,特定的值字段是空的.

这是为什么?
什么是以某种方式防止某些应用程序读取该字段?

我遇到同样的问题,下面的代码为任何有兴趣的人提供了一个工作示例.随着DPAPI的出现,所有这些都归功于Scherling.
public class ChromeCookieReader
{
    public IEnumerable<Tuple<string,string>> ReadCookies(string hostName)
    {
        if (hostName == null) throw new ArgumentNullException("hostName");

        var dbPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"GoogleChromeUser DataDefaultCookies";
        if (!System.IO.File.Exists(dbPath)) throw new System.IO.FileNotFoundException("Cant find cookie store",dbPath); // race condition,but i'll risk it

        var connectionString = "Data Source=" + dbPath + ";pooling=false";

        using (var conn = new System.Data.SQLite.SQLiteConnection(connectionString))
        using (var cmd = conn.CreateCommand())
        {
            var prm = cmd.CreateParameter();
            prm.ParameterName = "hostName";
            prm.Value = hostName;
            cmd.Parameters.Add(prm);

            cmd.CommandText = "SELECT name,encrypted_value FROM cookies WHERE host_key = @hostName";

            conn.Open();
            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    var encryptedData = (byte[]) reader[1];
                    var decodedData = System.Security.Cryptography.ProtectedData.Unprotect(encryptedData,null,System.Security.Cryptography.DataProtectionScope.CurrentUser);
                    var plainText = Encoding.ASCII.GetString(decodedData); // Looks like ASCII

                    yield return Tuple.Create(reader.GetString(0),plainText);
                }
            }
            conn.Close();
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读