小编ele*_*nor的帖子

MongoDB不允许使用'.' 在关键

我正在尝试保存包含特殊字符''的字典.在MongoDB的关键部分.错误如下所示,其中明确指出密钥不得包含特殊字符'.'.

>>> import pymongo
>>> client = pymongo.MongoClient('localhost')
>>> db = client['malware']                                                                                                                                                          
>>> test = db['test']
>>> d = {'.aaa' : '.bbb'}                                                                                                                                                           
>>> test.insert(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/pymongo/collection.py", line 362, in insert
    self.database.connection)
bson.errors.InvalidDocument: key '.aaa' must not contain '.'
Run Code Online (Sandbox Code Playgroud)

但我目前的信息包含'.' 在数据的关键部分,我需要存储到MongoDB.目前我只是删除'.' 从字符串中,另一个选项是用'_'或其他特殊字符替换它.

然而,所有这些都会导致信息丢失,因为如果我有一个密钥'.aaa'和一个密钥' aaa'并且我转换'.' 进入' '然后键完全一样,我丢失了一些信息.为什么Mongo不允许我将'.aaa'保存到数据库中?

任何想法如何处理问题?

python mongodb

18
推荐指数
1
解决办法
2万
查看次数

芹菜 - 完成任务的召唤功能

我正在使用带有django和rabbitmq的芹菜来创建一个消息队列.我也有一个工人,它来自不同的机器.在django视图中,我正在开始这样的过程:

def processtask(request, name):
  args = ["ls", "-l"]
  MyTask.delay(args)
  return HttpResponse("Task set to execute.")
Run Code Online (Sandbox Code Playgroud)

我的任务配置如下:

class MyTask(Task):
  def run(self, args):
    p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    (out, err) = p.communicate()
    return out
Run Code Online (Sandbox Code Playgroud)

我现在的问题是,代理(我的django项目)现在如何接收工作人员在其计算机上执行的"ls -l"命令的输出.我想最好的事情是,只要工作人员准备好从执行的命令发送输出,就可以在代理中调用函数.

我想异步接收worker的输出,然后用输出更新网页,但那是另一次.现在我只想收到工人的输出.

更新

现在我添加了一个HTTP GET请求,该请求在任务结束时触发,通知Web应用程序任务已完成 - 我也在http GET中发送task_id.http GET方法调用django视图,它创建AsyncResult并获取结果,但问题是当调用result.get()时,我收到以下错误:

/usr/lib64/python2.6/site-packages/django_celery-2.5.1-py2.6.egg/djcelery/managers.py:178: TxIsolationWarning: Polling results with transaction isolation level repeatable-read within the same transaction may give outdated results. Be sure to commit the transaction for each poll iteration.
  "Polling results with transaction isolation level"
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?我没有使用数据库,因为我正在使用带有AMQP的rabbitmq.

更新.

我非常想使用第三个选项,这似乎是最好的选择 - …

python django rabbitmq celery

11
推荐指数
1
解决办法
7990
查看次数

WordPress + Disqus +拒绝执行内联脚本

我在我的Wordpress网站上加载了Disquss,该网站运行在HTTPS上.问题是,虽然评论显示在网页的底部,但它们是白色的(并且由于页面的背景也是白色的,因此它们不可见).

如果我在Chrome中打开Inspector,则会在控制台选项卡上打印以下错误.

    Refused to execute inline script because it violates the following
 Content Security Policy directive: "script-src https://*.twitter.com:* 
https://api.adsnative.com/v1/ad.json *.adsafeprotected.com *.google-analytics.com https://glitter-services.disqus.com 
https://*.services.disqus.com:* disqus.com http://*.twitter.com:* 
a.disquscdn.com api.taboola.com referrer.disqus.com *.scorecardresearch.com 
*.moatads.com https://admin.appnext.com/offerWallApi.aspx 'unsafe-eval' 
https://mobile.adnxs.com/mob *.services.disqus.com:*". Either the 'unsafe-
inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required
 to enable inline execution.
Run Code Online (Sandbox Code Playgroud)

这是因为Chrome中的弹出窗口拦截器扩展,但我想通过内容安全策略启用它:http://www.html5rocks.com/en/tutorials/security/content-security-policy/.基本上,错误发生在chrome-extension://*方案中,因此我需要在Content-Security-Policy中添加适当的条目以允许chrome扩展.

我应该如何禁用Chrome扩展程序的安全策略?

xss wordpress disqus content-security-policy

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

Windbg和符号文件

我的符号文件有问题.我尝试使用符号文件路径并按如下方式设置路径:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\driver2\objchk_win7_x86\i386
Run Code Online (Sandbox Code Playgroud)

但之后我将其更改为以下内容:

srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386
Run Code Online (Sandbox Code Playgroud)

我在路径中使用mydriver更改了driver2:这是我的驱动程序的.pdb文件所在的路径.问题是.sympath打印正确的路径,如下所示:

kd> .sympath
Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;C:\Users\myuser\Desktop\mydriver\objchk_win7_x86\i386
Expanded Symbol search path is: srv*c:\symbols*http://msdl.microsoft.com/download/symbols;c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386
Run Code Online (Sandbox Code Playgroud)

但仍未找到驱动程序的符号.如果我运行.reload命令,我们可以看到WinDbg在driver2 /目录中寻找.pdb而不是mydriver /目录.

kd> .reload /f mydriver.sys
SYMSRV:  c:\symbols\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/mydriver.pdb/3D655E533B0449A38D7AB0AF637CE9201/mydriver.pdb not found
SYMSRV:  c:\users\myuser\desktop\mydriver\objchk_win7_x86\i386\mydriver.pdb\3D655E533B0449A38D7AB0AF637CE9201\mydriver.pdb not found
DBGHELP: c:\users\myuser\desktop\driver2\objchk_win7_x86\i386\mydriver.pdb - file not found
*** ERROR: Module load completed but symbols could not be loaded for mydriver.sys
DBGHELP: mydriver - no symbols loaded
Run Code Online (Sandbox Code Playgroud)

我删除了所有工作区,关闭了WinDbg,重新启动了Windows,但是驱动程序2 /条目仍然存在:它必须位于默认工作区的缓存中或某处.如何删除WinDbg的整个个人设置,包括那些缓存,所以我可以重新启动WinDbg并使用driver2/path并使其使用mydriver /.

我也可以通过将mydriver /目录重命名为driver2 /来解决问题,但我不想解决这个问题.我想了解发生了什么,并尽我所能解决它.

windows windbg windows-kernel

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

返回libc - 问题

我遇到了返回libc漏洞的问题.问题是没有任何事情发生,但没有分段错误(是的,我实际上是溢出堆栈).

这是我的计划:

int main(int argc, char **argv) {
  char array[512];
  gets(array);
}
Run Code Online (Sandbox Code Playgroud)

我使用的是gets而不是strcopy,因为我的地址以0x00开头而strcpy认为它是字符串的结尾,所以我不能使用它.

以下是我需要的地址:

$ gdb main core
(gdb) p system
$1 = {<text variable, no debug info>} 0x179680 <system>
(gdb) p exit
$2 = {<text variable, no debug info>} 0x16f6e0 <exit>
(gdb)  x/s 0xbffffe3f
0xbffffe3f:      "/bin/sh"
Run Code Online (Sandbox Code Playgroud)

输入正确的序列时,会发生这种情况:

eleanor@eleanor32:~/testing/root$ perl -e 'print "\x41"x516 . "\x80\x96\x17\x00" . "\xe0\xf6\x16\x00" . "\x3f\xfe\xff\xbf"' | ./main
eleanor@eleanor32:~/testing/root$
Run Code Online (Sandbox Code Playgroud)

所以什么都没有.

但是如果我输入520'A'(0x41),那么EIP会溢出'A'.如果有516'A',则没有任何反应,但EIP包含系统地址,在退出地址之后,在/ bin/sh指针之后.

什么都没发生?

c linux stack-overflow exploit buffer-overflow

8
推荐指数
1
解决办法
3682
查看次数

在第三方服务器上验证Android的authToken

我正在编写一个Android应用程序,它使用AccountManager来获取令牌.从Android应用程序我可以与谷歌Picasa进行交互 - 它工作正常.

我想要实现的目的是:将一些text + authToken发送到我的第三方服务器,然后在保存文本之前检查令牌是否正确.现在的问题是:是否有可能确定特定令牌的authToken是否仅在令牌本身(可能是电子邮件地址)上是正确的.

我已经编写了服务器部分,它接受令牌(从android应用程序发送),然后向URL地址发出请求:

https://accounts.google.com/o/oauth2/tokeninfo?access_token=%token_here%
Run Code Online (Sandbox Code Playgroud)

我得到的是以下JSON:

{
  "error" : "invalid_token"
}
Run Code Online (Sandbox Code Playgroud)

但是这里的链接http://oauthssodemo.appspot.com/step/4表明,如果令牌是正确的,我应该收到不同的JSON响应.你能告诉我我做错了什么:我相信检查令牌有效性的方法真的不是那么简单,但我宁愿实现整个openid或其他东西.即使是这种情况,如何检查Android应用程序发送的令牌是否正确,这样我就可以保存消息的"文本"部分.

谢谢.

android picasa google-api accountmanager

8
推荐指数
2
解决办法
5664
查看次数

通过网络的android多人游戏

我正在编写Android多人游戏,它基本上由客户端连接和交换消息的服务器组成.当玩家连接到服务器时,玩家列表将返回给他/她.然后玩家可以选择要挑战的用户 - 当然他必须从玩家列表中选择一个仅包含连接用户的玩家.

当玩家1挑战玩家2时,需要将消息从玩家1发送到服务器,服务器又必须向玩家2发送消息,通知他有关挑战的信息.然后,player2可以接受/拒绝挑战.

我可以使用以下技术来实现这一目标:

  1. 使用Java套接字编程的自定义服务器/客户端.服务器基本上接受来自客户端的连接,为每个连接的客户端生成一个新线程.这个问题是:

    • 需要从客户端到服务器打开持久连接,浪费Android手机的电池寿命.这并不是一个很大的限制,因为电池没有消耗那么多.
    • 当我想要开发另一个游戏时,我将不得不从头开始重写客户端/服务器代码 - 同时选择另一个端口来监听传入的连接 - 整个概念变得相当难以维护.
    • 我也担心这是否可行.如果有数千个客户端同时连接,则为每个客户端产生另一个线程会发出很多声音.但我猜这些PC游戏是这样做的.不确定android.
  2. 使用Java REST jersey在HTTP之上构建客户端 - 服务器.如果服务器可以轻松地向客户端发送通知,这将是一个完美的解决方案.这里实际上有多个设计决策:

    • 客户端每隔几秒钟就会向服务器提取任何新的数据/通知 - 这真的很糟糕,因为我们遇到了无响应,延迟等问题.
    • 客户端可以向服务器发送等待请求,因此客户端只有在某些数据可用后才会收到响应.这是更好的,但是当两个通知一个接一个地需要发送给用户时仍然会产生延迟.第一个通知立即发送,因为客户端已打开连接,等待接收数据.但我们必须等待客户端发起另一个长http请求以接收第二个通知.问题变得更大,因为有多个通知需要连续发送到特定客户端.
    • 客户端可以发起http流,其中在处理请求时通信保持打开,因此服务器也可以随时向客户端发送多个消息.这里的问题是我不知道它在Android上的效果如何.我看了几个实现:
      • Java jersey +氛围:实际上没有成功实现它.这似乎是最有希望的,但我不想花太多时间,因为我甚至不确定它是否符合我的要求.
      • 执事:看起来非常整洁,但在他们的官方网页上看过视频教程之后,我不确定它能做我需要的东西.当player1挑战player2时,它是否可以向player2发送通知,让它知道匹配请求?
  3. 如果两个玩家通过网络玩游戏,我会很高兴知道其他多人游戏如何处理网络通信.

  4. 我也愿意接受一个全新的建议,即如何实现我的目标.我可以编写任何代码,所以不要犹豫,让我知道一些更难以实现网络通信的方法.

我还要提一下,我很乐意在我的情况下实现一个完全特定的方法,所以它可以做任何工作,但我也在寻找更通用的方法来进行客户端和服务器之间的通信.这样我就可以编程一个接口/无论如何重用其他Android游戏,Android应用程序中的代码.

我希望我提出这个问题,我会得到一些有价值的答案.

谢谢

java sockets networking android network-programming

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

asmack - 接收自定义XML消息||

我花了一些时间在Android设备中添加smack.providers,我的应用程序很好地接收了它.我添加了默认的iqProviders和extensionProviders,但我还添加了我的自定义extensionProvider,它是以下内容:

<extensionProvider>
  <elementName>players</elementName>
  <namespace>boxer:players</namespace>
  <className>company.games.boxer.PlayerListProvider</className>
</extensionProvider>
Run Code Online (Sandbox Code Playgroud)

我还要介绍一下PlayerListProvider类,它目前只是为了看它是否会被调用(它不会被调用) - 当我知道它被调用时我将完全实现它,因此至少是功能的一部分作品:

import java.util.List;
import java.util.Map;

import org.jivesoftware.smack.packet.PacketExtension;
import org.jivesoftware.smackx.provider.EmbeddedExtensionProvider;

import android.util.Log;

@SuppressWarnings("deprecation")
class PlayerListProvider extends EmbeddedExtensionProvider {
  protected PacketExtension createReturnExtension(String currentElement, String currentNamespace, Map<String,String> attributeMap, List<? extends PacketExtension> content) {
    Log.w("***** AAAAAAAAAAAAAAAAAAAA *******", "0");
    return new XMLPlayerList();
  }

}



class XMLPlayerList implements PacketExtension {

  public String getElementName() {
    return "aaaaa";
  }

  public String getNamespace() {
    return "aaaaa";
  }

  public String toXML() {
    return "aaaaa";
  }

}
Run Code Online (Sandbox Code Playgroud)

当我运行客户端Android应用程序时,我收到以下消息:

<message to="eee@localhost" type="chat" id="9" from="admin@localhost"> …
Run Code Online (Sandbox Code Playgroud)

java debugging xmp android

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

Tshark-无法仅显示自定义协议的数据

我有一个运行在端口8888(不,它不是http)和TCP之上的自定义协议。我已经捕获到PCAP文件中的数据包流。问题在于,现在我不能仅显示其数据部分。

我尝试使用以下命令:

tshark -r test.pcap -R 'tcp.port==8888 && tcp.len>0' -T fields -e "tcp.data"
Run Code Online (Sandbox Code Playgroud)

但它显示一个空字符串。tcp.data字段不是保存TCP数据包数据的字段吗?

如何仅显示所需数据?

linux networking tcp tcpdump wireshark

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

堆栈溢出 - 内存中的缓冲区位置

我正在研究缓冲区溢出(在IA32架构上),我想用这个示例程序澄清一个特殊的事情:

int main(int argc, char **argv) {
  char array[512];
  if(argc > 1)
    strcpy(array, argv[1]);
}
Run Code Online (Sandbox Code Playgroud)

我在执行汇编代码时跟踪了ebp,esp寄存器更改:函数main的汇编代码转储:

   0x080483c4 <+0>:     push   ebp
   0x080483c5 <+1>:     mov    ebp,esp
   0x080483c7 <+3>:     sub    esp,0x208
   0x080483cd <+9>:     cmp    DWORD PTR [ebp+0x8],0x1
   0x080483d1 <+13>:    jle    0x80483ed <main+41>
   0x080483d3 <+15>:    mov    eax,DWORD PTR [ebp+0xc]
   0x080483d6 <+18>:    add    eax,0x4
   0x080483d9 <+21>:    mov    eax,DWORD PTR [eax]
   0x080483db <+23>:    mov    DWORD PTR [esp+0x4],eax
   0x080483df <+27>:    lea    eax,[ebp-0x200]
   0x080483e5 <+33>:    mov    DWORD PTR [esp],eax
   0x080483e8 <+36>:    call   0x80482f4 <strcpy@plt>
   0x080483ed <+41>:    leave
   0x080483ee …
Run Code Online (Sandbox Code Playgroud)

c c++ linux security debugging

3
推荐指数
1
解决办法
921
查看次数