我正在构建一个浏览器游戏,我正在使用大量的ajax而不是页面刷新.我正在使用php和javascript.经过大量的工作,我注意到ajax并不完全安全.我担心的威胁是说有人想在我的SQL服务器上查找某些信息,他们只需要将正确的信息输入到与我的ajax调用关联的.php文件中.我正在使用GET样式的ajax调用,这是一个坏主意.无论如何,经过大量的研究,我有以下安全措施.我切换到POST(这不是更安全,但它是一个小问题).我有一个提到的地方,它也可以伪造,但又是另一种威慑力.
我已经到位的最后一个措施是这个问题的焦点,当我的网站被加载时,我生成并保存在会话中的80字符十六进制密钥,当我发送ajax调用时,我也发送了挑战密钥的形式
challenge= <?php $_SESSION["challenge"]; ?>
Run Code Online (Sandbox Code Playgroud)
现在当ajax php文件读取它时,它会检查发送的质询是否与会话质询相匹配.现在这本身不会做太多,因为你可以简单地打开萤火虫,看看容易发送什么挑战.所以我所做的就是一旦使用了挑战,它就会在会话中生成一个新挑战.
所以我的问题是这是多么安全,我站在它看起来只能看到挑战键发送后然后它更新,他们再也看不到它,直到它被发送,使得不可能发送伪造来自其他来源的请求.所以有人看到这个安全方法的任何循环漏洞或有任何额外的想法或想法.
我想我已经达到了"分析瘫痪"的状态.我有一个MVC应用程序,使用EF作为ORM.所以我正在尝试决定最好的数据访问模式,到目前为止我认为将所有数据访问逻辑放入控制器是要走的路......但它听起来有点不对劲.另一种选择是创建外部存储库,处理数据交互.这是我的利弊:
如果嵌入数据访问控制器,我将得到这样的代码:
using (DbContext db = new DbContext())
{
User user = db.Users.Where(x=>x.Name == "Bob").Single();
user.Address.Street = "some st";
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
所以有了这个,我得到了延迟加载的全部好处,我在完成后立即关闭连接,我对where子句的灵活性 - 所有的细节.con - 我在一个方法中混合了一堆东西 - 数据检查,数据访问,UI交互.
使用Repository,我正在外部化数据访问,理论上,如果我决定使用ado.net或使用不同的数据库,则可以替换repos.但是,我没有看到实现延迟加载的良好清洁方式,以及如何控制DbContext /连接的生命周期.说,我有CRUD方法的IRepository接口,我如何加载属于给定用户的地址列表?像GetAddressListByUserId这样的方法看起来很丑陋,错误,并且会让我创建一堆同样丑陋的方法,并且在使用ORM时没什么意义.
我确信这个问题已经解决了几百万次,希望有一个解决方案..
关于存储库模式的另一个问题 - 如何处理属性对象?例如,用户有一个地址列表,您将如何检索该列表?为地址创建存储库?使用ORM,地址对象不必具有回复用户的引用,也不需要具有repo的Id字段 - 它必须拥有所有这些.更多代码,更多暴露属性..
希望有人注意到我遇到问题的原因是什么.
对于所有其他时区,例如"Europe/Helsinki",下面的偏移计算返回正确的值,但由于某种原因,我得到'Etc/GMT + 2'样式时区的负值,反之亦然(例如,对于Etc/GMT-2,我得到正值,7200).
$dateTimeZone = new DateTimeZone('Etc/GMT+2');
echo $dateTimeZone->getOffset(new DateTime("now", new DateTimezone( 'UTC' )));
Run Code Online (Sandbox Code Playgroud)
预期:7200结果:-7200
除了定期轮询更改之外,是否有任何(标准)方法来注册将在新属性添加到特定对象时触发的事件或回调?
我的页面上有一个reportviewer(Microsoft.ReportViewer.WebForms)控件.我的所有报告都使用一个数据源.我希望能够从我的UAT环境启动时让我的报告在不同的数据库上运行.因此报告的位置是相同的,但数据来自不同的数据库.我似乎无法找到这是怎么做的,它甚至可能吗?
编辑:它们是SQL Server上的服务器报告.我知道你可以设置programificaly数据集,但我只是希望报告指向不同的数据库并保持报告的其余部分不变.2005年TIA,
约翰
iReport(4.0.1)中包含各种字段的报告包括:( $F{value}整数)和$F{created_at}.
我想计算可以给出的变量:
$F{value}何时$F{created_at}在给定日期之前的总和$F{value}何时$F{created_at}在给定日期之后的总和知道如何做到这一点?
如何检测我是否使用iphone模拟器或ipad模拟器.我正在使用一些第三方库,我将传递一个参数,无论我使用的是ipad还是iphone.为了测试应用程序,我想以编程方式检测我是否使用iphone模拟器或ipad模拟器.有没有办法识别它?
我继承了一个SQL CLR项目,作为我正在为客户工作的代码维护项目的一部分.不可否认,我对SQL CLR很陌生,所以我想弄清楚它是如何工作的.
我注意到数据库连接字符串存储在项目的属性中,所以如果需要,我知道如何更改它.我遇到的一个问题是:是否可以设置多个连接字符串以部署到多个SQL Server实例?在我的例子中,我有一个本地开发机器,一个登台服务器和一个生产服务器(每个服务器上有一个目标数据库的单独副本).我希望能够将SQL CLR程序集部署到所有3,而无需更改连接字符串并为每个连接字符串重新构建.
什么是更好的选择:
// Option 1:
$intValue = (int) $numericValue;
// Option 2:
$intValue = intval($numericValue);
Run Code Online (Sandbox Code Playgroud)
这两行之间有什么区别,应该在哪种情况下使用?
php ×3
javascript ×2
ajax ×1
asp.net ×1
asp.net-mvc ×1
c# ×1
datetime ×1
deployment ×1
git ×1
html ×1
ipad ×1
iphone ×1
ireport ×1
jquery ×1
orm ×1
properties ×1
reportviewer ×1
simulator ×1
sql-server ×1
sqlclr ×1
tortoisegit ×1