虽然麻将(实际游戏,而不是麻将solitare)在基本规则和游戏玩法方面相当简单,但设定AI过渡目标以达到某些最终游戏目标似乎相当复杂.
是否有人知道与此主题相关的任何论文,研究或其他材料?
标题中隐含的休闲/好奇心问题.
我个人更喜欢新操作符,以便在我看来使代码更具可读性.
哪些人自己使用?你选择一个而不是另一个的原因是什么?
此外,Emacs以不同的方式突出显示这些运算符,以便在查看屏幕时获得更多视觉反馈.我知道旧操作符也可以突出显示,但ISO646默认突出显示
问题
我们需要在我们的java应用程序中防御'WAITFOR DELAY'sql注入攻击.
背景
[这很长.跳到'解决方案?' 以下部分,如果你匆忙]
我们的应用程序主要使用预准备语句和可调用语句(存储过程)来访问数据库.
在一些地方,我们动态构建并执行查询以供选择.在此范例中,我们使用条件对象根据用户输入条件构建查询.例如,如果用户为first_name和last_name指定了值,则查询结果总是如下所示:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier'
Run Code Online (Sandbox Code Playgroud)
(在这个例子中,用户会指定"joe"和"frazier"作为他/她的输入值.如果用户有更多或更少的批评,我们会有更长或更短的查询.我们发现这种方法比使用准备更容易声明,比存储过程更快/更高效.
攻击
漏洞审计报告了sql注入失败.攻击者为'last_name'参数注入'frazier WAITFOR DELAY '00:00:20'值,导致这个sql:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20'
Run Code Online (Sandbox Code Playgroud)
结果:查询成功执行,但执行时间为20秒.攻击者可以占用数据库池中的所有数据库连接,并有效地关闭您的站点.
关于这种'WAITFOR DELAY'攻击的一些观察
我曾经想过,因为我们使用了Statement executeQuery(String),所以我们可以安全地从sql注入.executeQuery(String)不会执行DML或DDL(删除或删除).并且在分号上执行Query(String)choke,因此'Bobby Tables'范例将失败(即用户输入'frazier; DROP TABLE成员'作为参数.参见http://xkcd.com/327/)
"WAITFOR"攻击在一个重要方面有所不同:WAITFOR修改现有的"SELECT"命令,而不是单独的命令.
攻击仅适用于生成的查询中的"最后一个参数".即'WAITFOR'必须出现在sql语句的最后
解决方案,廉价黑客还是两者
最明显的解决方案是简单地将"AND 1 = 1"添加到where子句中.
生成的sql立即失败并阻止攻击者:
SELECT first_name,last_name FROM MEMBER WHERE first_name ='joe' AND last_name='frazier' WAITFOR DELAY '00:00:20' AND 1=1
Run Code Online (Sandbox Code Playgroud)
问题
我正在尝试删除我的程序中的另一个线程之前使用过的文件.
我无法删除该文件,但我不知道如何确定哪个线程可能正在使用该文件.
那么如何找出哪个线程在java中锁定文件?
我是一个单独的开发人员,没有另一台计算机来备份我的项目.我正在寻找源控件,我遇到了git,但所有设置教程都是针对外部服务器的.我曾经使用SourceGear Vault,但是看到git受到了很多关注,我不妨熟悉它.我并不总是有互联网接入.
Git适合我吗?我可以指出正确的方向进行设置吗?
我正在使用VS2008为Windows CE 5.0设备(Datalogic Kyman)创建Compact Framework应用程序.我在我的应用程序中使用SQL Server Compact 3.5.但是,我正在调试仍然安装了Windows CE 4.2的Kyman(通过USB使用移动设备中心连接).我的问题:
VS2008无法识别设备上已安装SQL Server Compact并要求我每次从IDE运行应用程序时都安装SQL Server Compact .安装程序向我显示有关SQL Server Compact CAB文件不适用于此设备的警告,但安装工作没有错误,应用程序也正常工作.
我已经取消选中"始终部署最新的.NET版本"这个框(不知道它的英文名称是什么,使用德语VS2008),但这没有用.
如何在每次启动应用程序之前告诉Visual Studio 不要安装SQL Server?
我希望网址比/ {Controller}/{Action}/{Id}更短.
例如,我想{Controller}/{Id},其中{Id}是一个字符串.
这将允许简单的路径,例如用户/用户名,页面/页面名称,新闻/新闻名称.我比在URL(用户/详细信息/用户名)中要求/ Details操作更好,这对最终用户来说不那么优雅.
我可以通过为任何我想要这种简单程度的控制器设置自定义路由来轻松完成这项工作.但是,这会导致实现其他操作时出现麻烦,例如{Controller}/{Action},其中{Action} ='Create',因为在这种情况下,字符串{Action}与字符串{Id}冲突.
我的问题:我怎么能有'保留'字样,所以如果URL是/ News/Create,它被视为一个动作,但如果URL是其他任何东西,例如/ News/A-gorilla-ate-my-论文,然后它被视为Id.
我希望在设置路线时可以定义这个?
使用Ben Griswold的答案,我已将默认的ASP.NET MVC路由更新为:
routes.MapRoute(
"CreateRoute", // route name
"{controller}/Create", // url with parameters
new { action = "Create" } // parameter defaults
);
routes.MapRoute(
"DetailsRoute", // route name
"{controller}/{id}", // url with parameters
new { action = "Details" } // parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults …
Run Code Online (Sandbox Code Playgroud) 我正在考虑从Matlab转到Python/numpy进行数据分析和数值模拟.我已经使用Matlab(和SML-NJ)多年了,并且在功能环境中非常舒适而没有副作用(除了I/O),但我对Python中的副作用有点不情愿.人们可以分享他们最喜欢的关于副作用的问题,如果可能的话,他们如何绕过它们?作为一个例子,当我在Python中尝试以下代码时,我有点惊讶:
lofls = [[]] * 4 #an accident waiting to happen!
lofls[0].append(7) #not what I was expecting...
print lofls #gives [[7], [7], [7], [7]]
#instead, I should have done this (I think)
lofls = [[] for x in range(4)]
lofls[0].append(7) #only appends to the first list
print lofls #gives [[7], [], [], []]
Run Code Online (Sandbox Code Playgroud)
提前致谢
考虑以下代码:
PS> $timer = New-Object Timers.Timer
PS> $timer.Interval = 1000
PS> $i = 1;
PS> Register-ObjectEvent $timer Elapsed -Action { write-host 'i: ' $i }.GetNewClosure()
PS> $timer.Enabled = 1
i: 1
i: 1
i: 1
...
# wait a couple of seconds and change $i
PS> $i = 2
i: 2
i: 2
i: 2
Run Code Online (Sandbox Code Playgroud)
我假设当我创建新的closure({ write-host 'i: ' $i }.GetNewClosure()
)值时$i
将绑定到此闭包.但不是在这种情况下.我改变了值,write-host
取新值.
另一方面,这有效:
PS> $i = 1;
PS> $action = { write-host 'i: ' $i …
Run Code Online (Sandbox Code Playgroud) 在数据仓库项目上工作,给我们教程的人建议我们坚持使用SQL查询来定义大量的数据流转换,引用它会在ETL盒子上消耗大量内存,所以我们而是将处理留给DB框.这真的可取吗?依赖GUI工具而不是在Integration包上执行一堆SQL脚本之间的平衡点在哪里?
老实说,我想尽可能避免编写SQL查询.(但那不是重点.我真的很想客观地看待这一点.)
asp.net ×1
c++ ×1
closures ×1
events ×1
file-locking ×1
git ×1
java ×1
jdbc ×1
mahjong ×1
matlab ×1
operators ×1
powershell ×1
python ×1
side-effects ×1
sql-server ×1
ssis ×1
survey ×1
windows-7 ×1
windows-ce ×1