小编Con*_*orU的帖子

DTD禁止在xml文档中例外

我在尝试解析C#应用程序中的XML文档时遇到此错误:

"出于安全原因,此XML文档中禁止使用DTD.要启用DTD处理,请将XmlReaderSettings上的ProhibitDtd属性设置为false,并将设置传递给XmlReader.Create方法."

作为参考,异常发生在以下代码的第二行:

using (XmlReader reader = XmlReader.Create(uri))
{
    reader.MoveToContent(); //here

    while (reader.Read()) //(code to parse xml doc follows).
Run Code Online (Sandbox Code Playgroud)

我对Xml的了解非常有限,我不知道DTD处理是什么,也不知道如何做错误消息的建议.有关可能导致此问题以及如何解决问题的任何帮助?谢谢...

c# xmlreader xml-parsing

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

OAuth:如何从 javascript 中隐藏 API 密钥

我们正在迁移我们基于 MVC 的服务器应用程序并制作一个 REST-ful API,通过它可以处理调用。

我一直在阅读 AES 加密和 OAuth2 并决定实施一个从这些概念发展而来的解决方案,如下所示:

  1. 客户端发送登录请求,提供用户 ID 或电子邮件。此请求使用 API 密钥进行 HMAC。
  2. 服务器检查用户 ID/电子邮件是否与现有帐户匹配,如果找到,则创建并存储服务器随机数,将其作为响应的一部分发送给客户端。
  3. 客户端创建他们自己的客户端随机数,并从 API 密钥和两个随机数创建一个新的临时密钥。然后它发送一个登录请求,并使用这个临时密钥加密的密码[为了增加熵并避免以明文形式发送密码]。
  4. 服务器使用它在这个平台上为这个客户端存储的最新随机数解密密码和 HMAC [移动和网络客户端可以有自己不同的随机数和会话] 以及以明文发送的客户端随机数,如果 HMAC检查它然后根据数据库[PBKDF2散列和加盐]验证密码。
  5. 如果请求有效并且密码和用户 ID 匹配记录,则在该平台上为该用户 ID 创建一个新的会话密钥,并将此密钥发送到客户端,并将用于此后来自客户端的每个 API 请求的 HMAC。
  6. 任何新的非登录请求都将包括根据会话密钥和随机化 IV 计算出的 HMAC 签名。

所有通信都通过 TLS 处理,因此这是增加的安全性,而不是唯一的防线。

在移动应用程序上,这会起作用,因为您可以在配置文件中隐藏移动应用程序的密钥,这提供了一些不错的安全措施 - [也许不是很多,我不完全确定]但是如果我们尝试转换所有请求从我们的网页到这种形式,这意味着使用 Javascript 来处理客户端 AES 加密和身份验证,并且……正如本文清楚地解释的那样,“如果您将 API 密钥存储在 JavaScript Web 应用程序中,您不妨打印一下它在主页上以粗体大写字母显示,因为全世界现在都可以通过浏览器的开发工具访问它。”

我可以只使用随机数作为 API 密钥——或者完全放弃对这些请求使用 AES 加密,并尝试通过其他方式(例如 CSRF 令牌)进行验证,并确保所有请求都以某种方式来自我们自己的前端——但是如果我们想创建一个允许与其他页面或服务集成的 API,这将不起作用,即使那样,我将如何保护客户端的秘密会话密钥?

这篇文章建议生成一次性 cookie 作为令牌,但这是一个有限的解决方案,适用于海报的服务,但不适用于我们。我希望能够 HMAC 用户发送的每个请求都带有一个用户特定的密钥,该密钥可以过期并被重置,并且由于该服务最终将处理资金,我希望请求身份验证被严格锁定。

那么我的选择是什么?

我是不是就放弃了 Javascript,因为它注定要失败?有什么方法可以存储密钥而不会像硬编码到 .js 脚本中的那样将它清楚地暴露出来?我是否应该生成一个仅用于登录调用的新临时密钥,并在用户请求服务器随机数时将其发送给用户?

此外,我链接到的帖子首先建议使用 cookie 来存储客户端的 Session …

javascript aes oauth-2.0

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

不规则线条条码打印

一位客户要求我为他们构建一个库存解决方案,他们可以为所有办公设备打印条形码标签,以便以各种方式跟踪它们。

他们给了我一台 Citizen CL-S621 打印机(203x203 dpi 分辨率)用于测试,然后(那是噩梦)配置其驱动程序以打印并将所有内容安装到他们给我测试的非标准标签上,这是我遇到的最大问题仍然遇到的问题是打印机无法以直线打印某些条形,而是以虚线/点线形式打印它们。

下面的 C# 代码显示了我如何使用此库构建条形码的基础知识:

public void CreateTheBarcode(string StringToEncode)
{
    Barcode b = new Barcode();
    b.LabelFont = new Font("Sample Bar Code Font", 24, FontStyle.Bold);
    b.IncludeLabel = true;
    b.Encode(BarcodeLib.TYPE.CODE128, StringToEncode, Color.Black, Color.White, 730, 140);
    b.SaveImage(@"C:\temp\Barcodes\"+StringToEncode+".png",SaveTypes.PNG);
    Print(@"C:\temp\Barcodes\"+StringToEncode+".png");
}

public static void Print(string FilePath)
{
    Process printJob = new Process();
    printJob.StartInfo.FileName = FilePath;
    printJob.StartInfo.UseShellExecute = true;
    printJob.StartInfo.Verb = "printto";
    printJob.StartInfo.CreateNoWindow = false;
    printJob.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    printJob.StartInfo.Arguments = "\"" + "Citizen CL-S621" + "\"";
    printJob.StartInfo.WorkingDirectory = Path.GetDirectoryName(FilePath);
    printJob.Start(); …
Run Code Online (Sandbox Code Playgroud)

c# printing barcode barcode-printing

4
推荐指数
1
解决办法
6972
查看次数

SQL Server ISNULL/Coalesce仍然返回空列表

我有一个名为Users一个名为Limit包含整数值的列的表.每个用户都有一个限制,但未注册的用户的默认限制为1.

我想运行一个简单的查询,告诉我该限制的用户,如果他们注册或默认为1,如果他们不是注册用户,但是当我运行一个查询与任一ISNULLCoalesce如下记载:

SELECT coalesce(Limit,1) AS limit 
FROM User 
WHERE userID = 'testUser'
Run Code Online (Sandbox Code Playgroud)

如果我查询现有用户,查询将正常工作,但如果我尝试未注册的用户将返回一个空列表[它应该返回值为1的单行].

使用ISNULL而不是合并产生相同的结果.我发现的每个例子ISNULL和合并都是这样的.我错过了什么?

sql sql-server select coalesce

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