我目前拥有自己的应用程序安全服务,该服务在我的企业中运行,并且 - 在很大程度上 - 满足业务需求.
我目前面临的问题是,该服务传统上(天真地)依赖于用户的源IP保持不变作为对抗会话劫持的对冲 - 企业中的Web应用程序不能直接向公众提供,并且它过去是完美的我可以要求用户的地址在给定的会话期间保持不变.
不幸的是,情况已不再如此,因此我不得不切换到不依赖源IP的解决方案.我更倾向于实现一个实际完成原始设计者意图的解决方案(即防止会话劫持).
到目前为止,我的研究已经出现了这个问题,其实质上是"用SSL会话密钥加密你的身份验证令牌哈希".
从表面上看,这似乎是一个完美的解决方案,但我仍然怀疑这个方案的实际实施是不切实际的,因为客户端和服务器可能在任何时候 - 有效地任意 - 选择重新协商SSL会话,从而更改密钥.
这是我想象的场景:
这是一个真正的问题,还是由于(至少可以说)对SSL的工作方式不太完美的理解,这是我的误解?
背景:我有一个用C#(2005)编写的自定义类,代码类似于以下内容:
public class Savepoint
{
public int iOffset; /* Starting offset in main journal */
public u32 nOrig; /* Original number of pages in file */
public u32 iSubRec; /* Index of first record in sub-journal */
};
Run Code Online (Sandbox Code Playgroud)
用Savepoint sp声明变量后; 我可以测试是否已使用类似于以下代码进行实例化:
if (sp != null) {...}
Run Code Online (Sandbox Code Playgroud)
问题:是否有可能以某种方式重载类运算符,以便我也可以使用以下语法:if(sp){...}或if(sp!= 0){...}
PS:除了习惯之外,我没有真正的理由想要写(sp).
我把它作为xml:
<root xmlns:event="http://www.webex.com/schemas/2002/06/service/event">
<event:event>
<event:sessionKey></event:sessionKey>
<event:sessionName>Learn QB in Minutes</event:sessionName>
<event:sessionType>9</event:sessionType>
<event:hostWebExID></event:hostWebExID>
<event:startDate>02/12/2009</event:startDate>
<event:endDate>02/12/2009</event:endDate>
<event:timeZoneID>11</event:timeZoneID>
<event:duration>30</event:duration>
<event:description></event:description>
<event:status>NOT_INPROGRESS</event:status>
<event:panelists></event:panelists>
<event:listStatus>PUBLIC</event:listStatus>
</event:event>
...
</root>
Run Code Online (Sandbox Code Playgroud)
我如何遍历所有事件:事件节点和显示,例如,所有事件:SessionKey?
这不起作用:
$xml = new SimpleXMLElement($r);
$xml->registerXPathNamespace('e', 'http://www.webex.com/schemas/2002/06/service/event');
foreach($xml->xpath('//e:event') as $event) {
var_export($event->xpath('//e:sessionKey'));
}
Run Code Online (Sandbox Code Playgroud) 如何在Membership类中使用CreateUser方法而不必分配问题和答案?
我已使用以下设置在web.config中禁用它.
requiresQuestionAndAnswer="false"
Run Code Online (Sandbox Code Playgroud)
我需要CreateUser方法的状态输出,但重载需要问题和答案.谁能建议我怎么做呢?
NUnit让我在每个测试方法之后调用一个方法吗?
例如
class SomeClass
{
[SomeNUnitAttribute]
public void CalledAfterEveryTest()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我知道[SetUp]和[TearDown],但这只适用于当前类中的测试.我想要像[TearDown]这样的东西,除了它在每个单元测试之后运行,无论它是否在当前类中.可能?
我有一个简单的结构,使用有限.结构是在调用数据库中的数据的方法中创建的.如果没有从数据库返回的数据我希望能够返回null,但是Visual Studio抱怨,无法将null转换为PackageName.StructName,因为它是一个不可为空的值类型.
我该如何让它可以为空?
我目前有一个存储过程,它返回帐号和相关详细信息的列表.结果集可能包含同一帐号的多个条目.我还想获得一些汇总信息,例如特定结果集中包含多少个不同的帐户.有没有办法从我的存储过程结果中检索这样的视图,如
SELECT AccountNumber, Count(*)
FROM mystoredproc_sp
GROUP BY AccountNumber
Run Code Online (Sandbox Code Playgroud)
如果它需要包含在另一个存储过程中,那很好,但我希望能够至少从第一个SP中已经存在的逻辑中受益,而不会复制其大部分代码.
在我开发一个漂亮的数据驱动的Silverlight应用程序的过程中,我似乎不断遇到某种需要解决的竞争条件.最新的一个在下面.任何帮助,将不胜感激.
后端有两个表:一个是组件,一个是制造商.每个组件都有一个制造商.根本不是一个不寻常的外键查找关系.
我是Silverlight,我通过WCF服务访问数据.我将调用Components_Get(id)来获取Current组件(查看或编辑)以及调用Manufacturers_GetAll()以获取制造商的完整列表,以填充ComboBox的可能选择.然后,我将ComboBox上的SelectedItem绑定到当前组件的制造商,将ComboBox上的ItemSource绑定到可能的制造商列表.像这样:
<UserControl.Resources>
<data:WebServiceDataManager x:Key="WebService" />
</UserControl.Resources>
<Grid DataContext={Binding Components.Current, mode=OneWay, Source={StaticResource WebService}}>
<ComboBox Grid.Row="2" Grid.Column="2" Style="{StaticResource ComboBoxStyle}" Margin="3"
ItemsSource="{Binding Manufacturers.All, Mode=OneWay, Source={StaticResource WebService}}"
SelectedItem="{Binding Manufacturer, Mode=TwoWay}" >
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Name}" Style="{StaticResource DefaultTextStyle}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)
这是最好的工作时间,直到我变得聪明并做了一点客户端缓存组件(我计划为制造商打开).当我打开组件的缓存并获得缓存命中时,所有数据都将正确存在于对象中,但SelectedItem将无法绑定.原因是,在Silverlight中调用是异步的,并且在缓存的帮助下,在制造商之前不会返回Component.因此,当SelectedItem尝试在ItemsSource列表中找到Components.Current.Manufacturer时,它不存在,因为此列表仍然为空,因为尚未从WCF服务加载Manufacturers.All.同样,如果我关闭组件缓存,它会再次运行,但感觉不对 - 就像我很幸运时机正在运转.正确的修复恕我直言,MS用于修复ComboBox/ItemsControl控件,以了解这将发生Asynch调用是常态.但在那之前,我需要一种方法来解决它...
以下是我想到的一些选项:
任何想法/评论?
FWIW:我会在这里发布我的解决方案,以造福他人.
@Joe:非常感谢你的回复.我知道只需要从UI线程更新UI.这是我的理解,我想我已经通过调试器确认了这一点,在SL2中,服务参考生成的代码为您解决了这个问题.即当我调用Manufacturers_GetAll_Asynch()时,我通过Manufacturers_GetAll_Completed事件获得结果.如果查看生成的服务引用代码,它可确保从UI线程调用*Completed事件处理程序.我的问题不是这个,而是我做了两个不同的调用(一个用于制造商列表,一个用于引用制造商id的组件),然后将这两个结果绑定到一个ComboBox.它们都绑定在UI线程上,问题是如果列表在选择之前没有到达那里,
另请注意,如果您只是以错误的顺序设置ItemSource和SelectedItem,这仍然是一个问题!
另一个更新:虽然仍然存在组合框竞争条件,但我发现了一些有趣的东西.您永远不应该从该属性的"getter"中生成PropertyChanged事件.示例:在我的类型为ManufacturerData的SL数据对象中,我有一个名为"All"的属性.在Get {}中,它会检查它是否已被加载,如果没有,它会加载它:
public class ManufacturersData : DataServiceAccessbase
{
public ObservableCollection<Web.Manufacturer> All
{
get
{
if (!AllLoaded)
LoadAllManufacturersAsync();
return mAll;
}
private set
{
mAll …Run Code Online (Sandbox Code Playgroud) 我正在统一这些不一致的命名约定,这个问题最近让我发疯了.
在我正在使用的代码库中没有关于"ID"的约定; "ID","Id"甚至"iD"使用不一致.
****问题**:在.NET中,你们如何将"ID"大写?例如,nodeID,nodeId?FolderID或FolderId?
****编辑**:复数案件怎么样?那么我应该做"NodeIDs"还是"NodeIds"?
谢谢
c# ×2
.net ×1
.net-3.5 ×1
aggregate ×1
asp.net ×1
class-design ×1
cookies ×1
data-binding ×1
https ×1
javascript ×1
namespaces ×1
non-nullable ×1
nunit ×1
php ×1
security ×1
session ×1
silverlight ×1
simplexml ×1
sql ×1
ssl ×1
unit-testing ×1
wcf ×1
web-config ×1
xml ×1