我有一个记录异常条带跟踪的应用程序,我希望这些堆栈跟踪在生产中部署时包含文件名和行号.我想出了如何使用程序集部署调试符号,但在研究问题的过程中我遇到了这个问题,这意味着在生产环境中包含pdb文件并不是一个好主意.对接受的答案的评论说:"......调试信息可以泄露敏感数据并成为攻击媒介.取决于你的应用程序是什么."
那么可能会暴露哪种敏感数据呢?如何使用调试符号来破坏应用程序?我对技术细节很好奇,但我真正想要的是一种评估任何给定应用程序和生产环境中包含调试符号的风险的实用方法.换句话说:可能发生的最坏情况是什么?
编辑:后续问题/澄清
因此,基于目前为止每个人的答案,似乎这个问题可以简化为.NET应用程序.这篇来自John Robbins的博客链接在迈克尔·马多克斯的答案中,有点向我跳了出来:
.NET PDB仅包含两条信息,源文件名及其行和本地变量名.所有其他信息都已包含在.NET元数据中,因此无需在PDB文件中复制相同的信息.
对我来说,这重申了其他人对Reflector所说的话,其含义是真正的问题是访问程序集.一旦确定了,关于PDB的唯一决定是你是否关心暴露文件名,行号和本地变量名(假设你没有向最终用户展示堆栈跟踪).或者我过度简化了这个?
我想在我们的电子邮件简报中自定义"取消订阅"链接,以便他们只需点击一下即可删除收件人.现在他们只是指向一个通用页面,用户必须输入他们的电子邮件地址并选择他们想要取消订阅的新闻通讯.
看起来这应该非常简单,即只包括电子邮件地址和简报ID作为url参数.但是,当我查看我订阅的列表中的示例时,许多都不包含可识别的地址,并且大多数似乎在参数中使用类似guids和/或散列值的内容.从那以后,我猜测我应该散列或以其他方式编码一些信息,以防止恶意滥用取消订阅表单.
所以我的问题是关于最佳实践,而不是重新发明轮子.有没有一种标准的方法来处理这种功能?更具体地说,是否有理由不将收件人的电子邮件地址作为网址的一部分?这看起来很简单,让我觉得我忽略了什么.
我正在编写一个小桌面应用程序,它应该能够加密数据文件并用密码保护它(即必须输入正确的密码才能解密).我希望加密数据文件是自包含和可移植的,因此必须将身份验证嵌入到文件中(或者我假设).
我有一个看似可行的策略,看起来很合理,基于我所知道的(这可能只是危险),但我不知道它是否真的是一个好的设计.那么告诉我:这是疯了吗?有更好/最好的方法吗?
基本上我是从实现网站密码的常用方法推断出来的(当你没有使用OpenID时),即在你的数据库中存储用户密码的(盐渍)哈希,而不是保存实际的密码.但由于我使用散列用户密码作为对称加密密钥,因此我无法使用相同的值进行身份验证.所以我再次哈希,基本上把它当作另一个密码处理,并将双重哈希值保存在数据文件中.这样,我可以将文件带到另一台PC,只需输入我的密码即可解密.
那么这个设计是合理安全的,还是绝望的天真,或介于两者之间?谢谢!
编辑:澄清和后续问题re:盐.
我认为盐必须保密才有用,但你的答案和链接暗示情况并非如此.例如,由erickson(下面)链接的这个规范说:
因此,这里定义的基于密码的密钥推导是密码,盐和迭代计数的函数,其中后两个量不需要保密.
这是否意味着我可以将盐值存储在与散列键相同的位置/文件中,并且仍然比在散列时根本不使用盐时更安全?这是如何运作的?
更多上下文:加密文件不是为了与他人共享或解密,它实际上是单用户数据.但是我想将它部署在我无法完全控制的计算机上的共享环境中(例如在工作中),并且能够通过简单地复制文件来迁移/移动数据(所以我可以在家里,在不同的地方使用它工作站等).
我想对UPDATE语句返回的行进行排序,但根据OUTPUT子句的msdn页面没有直接的方法来执行此操作,其中说:
SQL Server不保证DML语句使用OUTPUT子句处理和返回行的顺序.
由于我不能只将"order by"添加到我的原始查询中,我的下一个方法是将结果放入临时表或表变量中,然后从中选择和排序.我应该能够找到使用临时表的解决方案,但我认为我以前从未使用过表变量.在这种情况下,是否有理由偏爱另一个?或者是否有更好的方法从OUTPUT子句获取排序结果(即使用临时表或表变量w/out)?
数据库平台是SQL Server 2005.
这是原始查询; 我想对ReleaseDate字段进行排序.
Update dbo.WFItem
Set ApprovedDate = getdate()
Output inserted.WFItemID, inserted.Title, inserted.Teaser
Where ApprovedDate is null
Run Code Online (Sandbox Code Playgroud)
它运行的表看起来像这样:
CREATE TABLE [dbo].[WFItem](
[WFItemID] [int] IDENTITY(1,1) NOT NULL,
[Title] [varchar](255) NULL,
[Teaser] [varchar](255) NULL,
[ReleaseDate] [datetime] NULL,
[ApprovedDate] [datetime] NULL,
[SentDate] [datetime] NULL,
CONSTRAINT [PK_WFItem] PRIMARY KEY CLUSTERED
(
[WFItemID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON …Run Code Online (Sandbox Code Playgroud) 我正在编写PowerShell脚本,将文件夹名称转换为PATH环境变量中的短名称并保存更改.它适用于显式路径,但它会扩展令牌,因此当我保存更改时,令牌会被显式路径替换.我想保留令牌.
例如,如果我的PATH是这样的: %SystemRoot%;%SystemRoot%\system32;C:\Program Files\TortoiseSVN\bin;C:\ProgramData\chocolatey\bin
我想要这个结果: %SystemRoot%;%SystemRoot%\system32;C:\PROGRA~1\TORTOI~1\bin;C:\PROGRA~3\CHOCOL~1\bin
但相反,我得到了这个: C:\Windows;C:\Windows\system32;C:\PROGRA~1\TORTOI~1\bin;C:\PROGRA~3\CHOCOL~1\bin
这是说明问题的完整脚本.
# get the current path.
# I ended up not using either of these approaches because they appear to
# be contextual; on my system, at least, they include paths that aren't
# seen when I view the PATH value from the System Properties -> Environment
# Variables dialog box.
$current_path = $env:Path
$current_path = [System.Environment]::GetEnvironmentVariable("Path")
# Instead, I get the PATH value directly from the registry, like so:
$current_path = …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现您的基本UPSERT功能,但有一点扭曲:有时我不想实际更新现有行.
本质上我正在尝试在不同的存储库之间同步一些数据,并且Upsert函数似乎是要走的路.所以主要基于Sam Saffron对这个问题的回答,以及其他一些研究和阅读,我提出了这个存储过程:
(注意:我正在使用MS SQL Server 2005,因此MERGE语句不是一个选项)
CREATE PROCEDURE [dbo].[usp_UpsertItem]
-- Add the parameters for the stored procedure here
@pContentID varchar(30) = null,
@pTitle varchar(255) = null,
@pTeaser varchar(255) = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE dbo.Item WITH (SERIALIZABLE)
SET Title = @pTitle,
Teaser = @pTeaser
WHERE ContentID = @pContentID
IF @@rowcount = 0
INSERT INTO dbo.Item (ContentID, Title, …Run Code Online (Sandbox Code Playgroud) 我正在尝试绑定GridView HyperLinkField,以便将绑定列用作URL中的参数值.非常标准的东西 - 没什么花哨的,但是当绑定列包含冒号时绑定失败,即:.我是我的特例,这个值是表示持续时间的字符串,例如"14:35"或"1:07:19".
这是我的GridView,其时间值绑定到HyperLinkField网址.
<asp:GridView ID="ResultsGridView" runat="server" AutoGenerateColumns="False"
DataSourceID="ResultsDataSource" EnableModelValidation="True"
AllowPaging="True">
<Columns>
<asp:BoundField DataField="Year" HeaderText="Year" SortExpression="Year" />
<asp:HyperLinkField DataNavigateUrlFields="RunTime"
DataTextField="RunTime" HeaderText="Hyperlink"
DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />
<asp:BoundField DataField="RunTime" HeaderText="Time"
SortExpression="RunTime" />
<asp:BoundField DataField="FullName" HeaderText="Name"
SortExpression="FullName" ReadOnly="True" />
</Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)
它产生这样的HTML.请注意,<a>标签没有href属性.
<tr>
<td>2010</td><td><a>34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
</tr><tr>
<td>2010</td><td><a>35:30</a></td><td>35:30</td><td>Rod Krueger</td>
</tr><tr>
<td>2010</td><td><a>35:38</a></td><td>35:38</td><td>Mike Johnson</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
但是,如果我将绑定字段从RunTime切换到Year,即切换到值中不包含冒号的列,它将按预期工作.上面的GridView,并更改HyperLinkField的DataNavigateUrlFields属性,如下所示:
<asp:HyperLinkField DataNavigateUrlFields="Year"
DataTextField="RunTime" HeaderText="Hyperlink"
DataNavigateUrlFormatString="LinkedPage.aspx?param={0}" />
Run Code Online (Sandbox Code Playgroud)
现在HTML输出是正确的,如下所示:
<tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">34:58</a></td><td>34:58</td><td>Joe Schmoe</td>
</tr><tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:30</a></td><td>35:30</td><td>Rod Krueger</td>
</tr><tr>
<td>2010</td><td><a href="LinkedPage.aspx?param=2010">35:38</a></td><td>35:38</td><td>Mike Johnson</td>
</tr><tr>
Run Code Online (Sandbox Code Playgroud)
所以我的问题的核心是:如何将包含冒号的数据列绑定到HyperLinkField的URL?或者,如果失败,用另一种方法创建相同的绑定超链接?
将数据格式更改为不包括冒号将是最后的手段,因为LinkedPage.aspx需要该格式的参数值,并且已经编写,测试和使用.
我需要一些SQL来更新数据库中的记录(如果它存在)并在不存在的情况下插入它,环顾四周看起来有几个解决方案,但我不知道正确/可接受的方法是什么.
理想情况下,我希望它可以在Firebird 2和MySQL 5上运行,因为需要针对两个数据库运行更新,如果在两者上运行相同的SQL,如果它在更多数据库上运行会更加简单,那将会更简单.
在这种情况下,速度和可靠性也会影响可靠性,但它可能会用于快速连续更新1000个记录(在不同的表中).
任何从属?
我想在我的ASP.NET Web应用程序的应用程序设置中存储一组键/值对,但我找不到直接的方法来做到这一点.例如,这两个 问题告诉我,StringDictionary等不会序列化为XML,并建议我必须推出自己的实现.但似乎这应该更容易做到; 毕竟,web.config是XML,<applicationSettings>本质上是键/值对的集合,所以感觉我错过了一些明显的东西.鉴于我的具体情况如下,我是否真的必须推出自己的序列化,还是有更简单的解决方法?
有问题的Web应用程序是一个基本联系表单,它根据参数的值向不同的收件人发送电子邮件; 例如http://www.examplesite.com/Contact.aspx?recipient=support会发送电子邮件至SupportGroup@exampledomain.com.
目标是通过编辑web.config文件来添加或删除收件人(或更改其地址),这样我就不必重新编译,并且可以在测试和生产环境中轻松维护不同的配置.例如:
// I can use something like this for the sender address
SmtpMsg.From = New MailAddress(My.Settings.EmailSender)
// And then just edit this part of web.config to use
// different addresses in different environments.
<setting name="EmailSender" serializeAs="String">
<value>webcontact@exampledomain.com</value>
</setting>
// I want something like this for the recipients
SmtpMsg.To.Add(My.Settings.Recipients("support"))
// and presumably some sort of equivalent xml in web.config
// maybe something like this???
<recipients>
<item name="support" serializeAs="String">
<value>SupportGroup@exampledomain.com</value>
</item>
<!-- …Run Code Online (Sandbox Code Playgroud) 如果是这样,它会做什么?
我在一位前同事写的一些HTML中注意到了它(所以我不能问作者).我猜这是一个错字,除了它在几个不同的模板中的几个不同的地方,用作图像的源属性.
例如:
<IMG height="6" src="ihttp://www.ourdomain.com/images/f2f3f4.gif" width="5">
顶级谷歌结果指向某种apache/php/mysql安装程序,但我们正在运行IIS,所以我无法想象这是相关的.
更具体地说,给定一组定义名为"content_title"的类选择器的样式表,有没有办法将该样式应用于所有<h1>标记而不将每个标记更改为<h1 class="content_title">,即将该类有效地应用于给定元素的所有实例?
上下文是我正在尝试将HTML和CSS从图形设计器应用到现有的Web应用程序,并且一些选择器不能很好地匹配.
我有一个ASP.NET Web表单应用程序,它使用母版页和主题.我已经获得了一个包含多个样式表的HTML示例/模板.
所以我更新了我的母版页以使用新设计,现在它看起来像这样:
<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="MyMaster.master.vb" Inherits="MyApp.MyMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<!-- these are the new style sheet from the graphic designer -->
<link rel="stylesheet" href="../layout.css" media="screen" />
<link rel="stylesheet" href="../cssmenus.css" type="text/css" />
<link rel="stylesheet" href="../dropdown.css" media="screen" />
<link rel="stylesheet" href="../print.css" media="print" />
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body class="twocolumn">
<div id="container">
<!-- etc. etc. …Run Code Online (Sandbox Code Playgroud) asp.net ×3
sql ×2
sql-server ×2
upsert ×2
.net ×1
cryptography ×1
css ×1
dictionary ×1
email ×1
encryption ×1
firebird ×1
gridview ×1
html ×1
hyperlink ×1
master-pages ×1
mysql ×1
passwords ×1
powershell ×1
production ×1
protocols ×1
security ×1
t-sql ×1
usability ×1
vb.net ×1
webforms ×1