小编Phi*_*ohl的帖子

WCF服务 - 使用UserName身份验证的证书和邮件安全性

我正准备创建一个WCF服务,客户可以使用它来更新我们系统中的数据.所以它必须通过互联网提供.我有一本关于WCF的书,我知道在Message Security通过Internet提供WCF服务时可以采用的方法.这是因为您不应该使用传输安全性,因为它只应该在您可以保证服务和客户端之间存在点对点连接的环境中使用.我做对了吗?所以我想将Message Security与自定义UserName身份验证结合使用.我知道我必须获得证书才能完成.我们公司已拥有用于我们网站的SSL证书.

  • 我可以使用相同的证书来获得WCF服务的消息安全性吗?

  • Message Security方式是否可以与期望ASMX Web服务的客户端互操作?

出于测试目的,我使用Makecert创建了自己的证书.它工作正常但我总是必须将证书添加到Trusted Persons客户端计算机上.

  • 是否可以在Message Security不强制客户端Trusted Persons手动添加证书的情况下启用上述证书?

现在,让我们假设以下场景:

公司基础设施

ISA-Server /防火墙后面有两个Web服务器.此ISA-Server拥有www.company.com地址的证书.因此所有SSL内容都由它处理.它还相应地将传入的请求转发给Web服务器.新创建的WCF服务应该在第二个Web服务器上运行.

  • 我是否必须将证书复制到网络服务器才能使用Message Security

如果是的话,我听说复制证书不是好的做法,因为它会降低安全级别.将证书移动到Web服务器不是一种选择,因为Web-Server1上的网站也需要它.

  • 在这种情况下我有什么选择?

和:

  • 无论给定的要求如何,这种情况的最佳做法是什么?

谢谢...

.net authentication wcf certificate

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

Web.config允许特定用户进行位置访问

我有一个网络服务器,用户可以从中下载特定于每个用户的文件.为确保每个用户只能下载自己的文件,他们必须通过基本身份验证进行身份验证.因此,对于每个用户,服务器上都有一个对用户特定文件夹具有读取权限的Windows帐户.

现在我想将此功能移动到另一台服务器.我不想为用户创建Windows帐户,但仍保留基本身份验证.因此,我将自定义基本身份验证HTTP模块自定义成员资格提供程序结合使用,后者允许我在web.config中定义用户.

身份验证工作正常,但使用jack或登录后jill(请参阅web.config)我可以访问这两个位置Dir1Dir2.如果我<allow users="jack" />在位置标记中注释掉该部分,情况也是如此.

附加信息:我创建了一个Default.aspx文件并添加了一个

<% Response.Write(HTTPContext.Current.User.Identity.Name) %>
Run Code Online (Sandbox Code Playgroud)

根据登录的人员返回正确的用户名.

<% Response.Write(HTTPContext.Current.User.Identity.IsAuthenticated) %>
Run Code Online (Sandbox Code Playgroud)

返回True.

我该怎么办jack才能访问(=从中下载文件)Dir1并且只能jill访问(=从中下载文件)Dir2而不是相反?

编辑:我试图为每个子目录添加web.config文件,而不是utkai提到的位置标记 - 具有相同的结果.每个用户都可以访问任何目录.

这是我的Web.config文件:

<configuration>
<system.webServer>
    <modules>
        <add name="CustomBasicAuthentication" type="LeastPrivilege.CustomBasicAuthentication.CustomBasicAuthenticationModule, LeastPrivilege.CustomBasicAuthenticationModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=F20DC168DFD54966"/>
    </modules>

    <security>
        <authentication>
            <customBasicAuthentication enabled="true" realm="TEST" providerName="AspNetWebConfigMembershipProvider" cachingEnabled="true" cachingDuration="15" requireSSL="false"/>
        </authentication>
        <authorization>
            <deny users="?" />
        </authorization>
    </security>
</system.webServer>

<system.web>
    <membership defaultProvider="AspNetWebConfigMembershipProvider">
        <providers>
            <add name="AspNetWebConfigMembershipProvider" type="LeastPrivilege.AspNetSecurity.Samples.WebConfigMembershipProvider, …
Run Code Online (Sandbox Code Playgroud)

asp.net permissions web-config

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

参数化SQL语句与非常简单的方法

当我开始在我的程序中编写第一个SQL语句时,我觉得很舒服,用同事给我看的一个非常简单的方法来保护自己免受SQL注入.它用两个单引号替换了所有单引号.

例如,有一个搜索字段,您可以在其中输入客户名以在可自定义项中进行搜索.如果你愿意进入

彼得的理发店

SELECT语句看起来像

SELECT *
FROM Customers
WHERE Customername = 'Peter''s Barbershop'
Run Code Online (Sandbox Code Playgroud)

如果现在攻击者会插入此:

';DROP TABLE FOO; --
Run Code Online (Sandbox Code Playgroud)

声明如下:

SELECT *
FROM Customers
WHERE Customername = ''';DROP TABLE FOO;--'
Run Code Online (Sandbox Code Playgroud)

它不会丢弃任何表格,而是搜索客户名称的客户名称; DROP TABLE FOO; - 我想,这将不会被发现;-)

现在经过一段时间编写语句并使用此方法保护自己免受SQL注入后,我读到许多开发人员使用参数化语句,但我从未读过使用"我们的"方法的文章.所以绝对有充分的理由.

参数化语句会覆盖哪些场景,但我们的方法却没有?与我们的方法相比,参数化语句有哪些优点?

谢谢
Philipp

sql sql-injection parameterized

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

在DataTable中标记非唯一行

我有一个DataTable,我想检查三列中的值是否唯一.如果不是,则应使用值组合的第一个外观的行号填充最后一列.

例如,这个表:

ID    Name    LastName    Age    Flag
-------------------------------------
1     Bart    Simpson     10      -
2     Lisa    Simpson      8      -
3     Bart    Simpson     10      -
4     Ned     Flanders    40      -
5     Bart    Simpson     10      -
Run Code Online (Sandbox Code Playgroud)

应该导致这个结果:

Line  Name    LastName    Age    Flag
-------------------------------------
1     Bart    Simpson     10      -
2     Lisa    Simpson      8      -
3     Bart    Simpson     10      1
4     Ned     Flanders    40      -
5     Bart    Simpson     10      1
Run Code Online (Sandbox Code Playgroud)

我通过使用两个嵌套for循环迭代DataTable 并比较这些值来解决这个问题.虽然这适用于少量数据,但当DataTable包含大量行时,它会变得非常慢.

我的问题是:这个问题的最佳/最快解决方案是什么,关于数据量可以在100到20000行之间变化?
有没有办法用LINQ做到这一点?(我对它不太熟悉,但我想学习!)

.net c# vb.net datatable performance

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

如何记录蛋糕构建参数?

在蛋糕构建脚本中,有一种非常巧妙的方法是使用.Description()Task上的扩展来记录任务.使用-showdescription参数调用构建脚本时,将显示这些说明.

我在构建脚本中有几个自定义参数,我想以某种方式记录.目前,我添加了一个任务,输出类似于手册页面样式的描述文本,用于可查看的参数,如下所示:

var nextLineDescription = "\n\t\t\t\t\t"; // for formatting 
Console.WriteLine("ARGUMENTS");
Console.WriteLine("");

Console.WriteLine("\t--someparameter=<number>\t\t" +
                "Description of the parameter" + nextLineDescription +
                "that can span multiple lines" + nextLineDescription +
                "and defaults to 5.\n");
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是很多工作,特别是如果文本应该正确格式化,以便它在命令行中可读.

因此,当我打电话给./build.ps1 -Target MyDocTask 我时,我得到了一个很好

ARGUMENTS

        --someparameter=number          Description of the parameter
                                        that can span multiple lines
                                        and defaults to 5

        --nextParameter                 Next description

...

是否有另一种方法或最佳实践来为参数添加文档,以便它可以在命令行中显示,类似于任务描述?

编辑:或者,我可以在构建脚本中找到所有可用参数来循环它们并生成这样的描述而不是为每个参数手动编写它吗?

c# documentation build cakebuild

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