小编fun*_*iki的帖子

使JSON Web令牌无效

对于我正在研究的新node.js项目,我正在考虑从基于cookie的会话方法切换(我的意思是,将id存储到包含用户浏览器中的用户会话的键值存储)使用JSON Web令牌(jwt)进行基于令牌的会话方法(无键值存储).

该项目是一个利用socket.io的游戏 - 在一个会话中将有多个通信通道(web和socket.io)的情况下,基于令牌的会话将非常有用.

如何使用jwt方法从服务器提供令牌/会话失效?

我还想了解在这种范例中我应该注意哪些常见(或不常见)的陷阱/攻击.例如,如果此范例容易受到与基于会话存储/ cookie的方法相同/不同类型的攻击.

所以,说我有以下(改编自这个这个):

会话商店登录:

app.get('/login', function(request, response) {
    var user = {username: request.body.username, password: request.body.password };
    // Validate somehow
    validate(user, function(isValid, profile) {
        // Create session token
        var token= createSessionToken();

        // Add to a key-value database
        KeyValueStore.add({token: {userid: profile.id, expiresInMinutes: 60}});

        // The client should save this session token in a cookie
        response.json({sessionToken: token});
    });
}
Run Code Online (Sandbox Code Playgroud)

基于令牌的登录:

var jwt = require('jsonwebtoken');
app.get('/login', function(request, response) {
    var user = {username: request.body.username, …
Run Code Online (Sandbox Code Playgroud)

javascript session session-cookies node.js jwt

357
推荐指数
14
解决办法
17万
查看次数

阻止Node.js中的SQL注入

是否有可能阻止Node.js中的SQL注入(最好使用模块),就像PHP具有保护它们的Prepared Statements一样.

如果是这样,怎么样?如果没有,有哪些例子可能会绕过我提供的代码(见下文).


一些背景:

我正在使用node-mysql模块制作一个带有Node.js + MySql的后端堆栈的Web应用程序.从可用性的角度来看,该模块很棒,但它还没有实现类似于PHP的Prepared Statements(虽然我知道它是在todo上).

根据我的理解,PHP的预处理语句的实现,尤其有助于防止SQL注入.但我担心,我的node.js应用程序可能会受到类似的攻击,即使默认情况下提供了字符串转义(如下面的代码片段).

node-mysql似乎是node.js最受欢迎的mysql连接器,所以我想知道其他人可能正在做什么(如果有的话)来解决这个问题 - 或者甚至是node.js开头的问题(不确定这是怎么回事,因为涉及用户/客户端输入).

我应该暂时切换到node-mysql-native,因为它确实提供了准备语句吗?我对此犹豫不决,因为它似乎不像node-mysql那样活跃(尽管这可能只是意味着它已经完成).

这是一个用户注册代码片段,它使用sanitizer模块,以及node-mysql准备的类似语句的语法(如上所述,它可以进行字符转义),分别防止跨站点脚本和sql注入:

// Prevent xss
var clean_user = sanitizer.sanitize(username);

// assume password is hashed already
var post = {Username: clean_user, Password: hash};

// This just uses connection.escape() underneath
var query = connection.query('INSERT INTO users SET ?', post,
   function(err, results)
   {
       // Can a Sql injection happen here?
   });
Run Code Online (Sandbox Code Playgroud)

javascript mysql sql-injection node.js node-mysql

80
推荐指数
4
解决办法
12万
查看次数

如何利用play2()函数来执行视频的快速流切换?

我目前正在开发具有分辨率切换功能的Flash网络播放器.我试图play2()在Actionscript中使用NetStream类的函数.

我遇到的问题是视频不会很快改变.对于那些熟悉这个play2()功能的人,我认为玩家正在表演"standard switch"而不是表演"fast switch."

文档说,当offset参数为-1时,会发生快速切换.实际发生了什么,但是一旦"NetStream.Play.Transition"接收到事件,玩家ns.time + ns.bufferLength在执行切换之前等待直到达到指示的时间.

我认为快速切换清除了缓冲区,但在检查时ns.backbufferlength,我发现所有内容仍然被缓存.它还提到:"当偏移为-1时,切换发生在第一个可用的关键帧之后netstream.time + 3,"这就是我感到困惑的原因.

任何有关此事的帮助/见解将不胜感激.

下面是一段描述正在发生的事情的代码(newStream()当用户点击更改为新的分辨率,youtube样式时调用):

public function newStream(address:String):void
{
    var opts:NetStreamPlayOptions = new NetStreamPlayOptions();
    opts.streamName = address;
    opts.transition = NetStreamPlayTransitions.SWITCH;
    opts.offset = -1;
    ns.play2(opts);
}

private function nsCallback(event:NetStatusEvent)
{
    switch(event.info.code)
    {
        case "NetStream.Play.Transition":
        {
            trace("Current time (on Transition): " + 
                  ns.time, "Buffer: " + ns.bufferLength);
            var estTime:Number = ns.time + ns.bufferLength;
            trace("Estimated Completion Time: " …
Run Code Online (Sandbox Code Playgroud)

flash actionscript actionscript-3 netstream

50
推荐指数
1
解决办法
3369
查看次数

如何使用外部Jar依赖项导出Eclipse项目?

在Processing中,我想导入一个用Java编写的库,它包装了一个外部库(.jar文件).

处理似乎导入我自己的库,但是当我调用构造函数(它引用外部库中的某些类)时,我java.lang.NoClassDefFoundError在Processing GUI控制台中获得了一个.

如果不是在我的Eclipse构建路径中包含External .jar,我使用库的实际源代码并导出所有这些,Processing不会抱怨.

我怎样才能打包这个项目,这样我就不必在Eclipse项目中包含所有库的源代码(而只是包含.jar文件)?


更新:根据NLtelaviv的建议,我选择导出为Runnable JAR.对我有用的是选择"将所需的库复制到生成的JAR旁边的子文件夹"选项.在这里,将在输出包含引用的.jar库的.jar的位置旁边创建另一个文件夹.

Update2:另一个有效的选项是"将所需的库提取到生成的JAR中".这样做允许JAR在内部访问引用.似乎同样适用于NLtelaviv的建议,但情况似乎并非如此.如果您不想要任何额外文件,请选择此选项.如果您浏览.JAR文件,您会注意到外部库位于单独的包文件夹中.

java eclipse processing jar external-dependencies

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

防火墙阻止的Windows文件共享上的Docker

TL; DR

从VM上运行的docker容器我可以ping所有主机IP(例如10.10.10.1和172.24.185.209),但我无法ping 10.0.75.1.我的猜测是,一旦我弄清楚为什么我无法访问10.0.75.1网络适配器,共享问题将得到解决.


我已经阅读了这篇描述相同问题的帖子并尝试了各种建议而没有成功.我尝试过以下方法:

  1. 使用以下命令将Docker接口设置为私有:
    • Set-NetConnectionProfile -interfacealias"vEthernet(DockerNAT)" - NetworkCategory Private
  2. Telnet成功达到10.0.75.1 445
  3. 共享c驱动器并检查我是否可以从\ 10.0.75.1\c访问它
  4. 关闭"Domain","Public","Private"的防火墙
  5. 我试图为"vEthernet(DockerNAT)"卸载"Microsoft网络的文件和打印机共享"(按照某人的建议重新安装),但得到了错误:0x80071779
  6. 然后我取消选中"用于Microsoft网络的文件和打印机共享",为"vEthernet(DockerNAT)"单击"确定",然后重新打开它.
  7. 我已经重新安装了Docker for Windows几次

我使用以下内容:

  • Windows10版本1803(OS Build 17134.285)
  • Docker CE Version 18.06.1-ce-win73(19507),频道:稳定

更新时间:9/27/2018

我试图连接到虚拟机并四处寻找,但它不能 - 它一直说"视频远程连接断开".但是按照这个https://docker-saigon.github.io/post/Docker-Beta/#private-registries:ebf9573d6838c40027746e9d7482622a我在VM上运行了一个容器并通过它访问了VM.我正在使用以下内容运行容器,因此我可以完全访问来宾网络(--net = host)

docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh
Run Code Online (Sandbox Code Playgroud)

我在主机上有以下适配器:

PS C:\WINDOWS\system32> ipconfig /all

Windows IP Configuration

   Host Name . . . . . . . . . . …
Run Code Online (Sandbox Code Playgroud)

networking firewall hyper-v docker docker-for-windows

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

将图像从浏览器拖放到WPF应用程序

我正在尝试在我的WPF应用程序中实现功能,将图像从浏览器拖到我的WPF应用程序的窗口中.

该代码适用于Firefox和Windows资源管理器,但Chrome和IE出现问题(尚未尝试任何其他浏览器).

这是一段代码片段:

private void Drag_Enter(object sender, DragEventArgs e)
{
    foreach (string format in e.Data.GetFormats())
        Console.WriteLine(format);
    Console.WriteLine("Effects:" + e.AllowedEffects);
}

private void Drag_Drop(object sender, DragEventArgs e)
{
    string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
    ImageSourceConverter converter = new ImageSourceConverter();
    foreach (string file in files)
    {
        if (converter.IsValid(file))
        {
            // Do something with the image
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

看看输出,似乎Firefox实际上将图像保存到剪贴板,而Chrome只是抓取图像的html,而IE没有对它做任何事情.

任何人都可以了解我如何获得跨浏览器功能?


更新:我发现的一些解决方法是解析html(Chrome/Firefox)的图像源,然后使用类似WebClient对象的源从源代码下载.但是,更喜欢一种方法,它更强大地检查文件类型.

IE9和Firefox都有一个DeviceIndependentBitmap文件格式,拖动非超链接图像时可用.这似乎是一个更安全的选择,虽然Chrome似乎不支持它.它对超链接图像也没那么有用.


对于Firefox,输出是(Drag_Enter由于某种原因被触发两次):

text/x-moz-url
FileGroupDescriptor
FileGroupDescriptorW
FileContents
UniformResourceLocator
UniformResourceLocatorW
text/x-moz-url-data
text/x-moz-url-desc
text/uri-list
text/_moz_htmlcontext
text/_moz_htmlinfo
text/html
HTML Format
Text
UnicodeText
System.String
application/x-moz-nativeimage
DeviceIndependentBitmap
FileDrop …
Run Code Online (Sandbox Code Playgroud)

c# wpf drag-and-drop

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

PassportJS自定义验证回调未被调用

更新:以下错误由提交修复.我已将第一个答案标记为"正确",尽管在其中一条评论中引起了我的注意

我希望利用自定义回调来处理Passport的身份验证本地策略中登录的成功和失败,但看起来它只是在成功时被调用.

这是我正在谈论的片段:

passport.use(new LocalStrategy(
    {usernameField: 'email', passwordField: 'password'},
    function(email, password, done) {
        if(canLogin) done(null, user);
        else done({message: "This is an error message" }, false, { message: "Some Info" });
    }
));


app.post('/login', function(req, res, next) {
      passport.authenticate('local', function(err, user, info) {
         // Only called if err is not set
    });
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?我的印象是回调会被调用,所以我可以自己处理错误.

javascript node.js express passport.js

6
推荐指数
1
解决办法
5942
查看次数

SVG 填充子元素的宽度

我希望我的容器 SVG 元素能够缩放,以适应其子组元素或在溢出时显示滚动条。我想知道是否有一个 css 属性可以做到这一点。

例如,如果标记如下所示:

<div class="wrapper" style="width:500px; overflow-x:scroll;">
   <svg class="main">
      <g width="1000"></g>
   </svg>
</div>
Run Code Online (Sandbox Code Playgroud)

如果子元素超过其宽度,如何使 svg 的宽度填充到“1000”或显示滚动条?

下面的css对上面的没有影响:

.main {
    width: 500px; // Setting to 100% also does nothing
    overflow-x: scroll;
}
Run Code Online (Sandbox Code Playgroud)

目前,我通过根据需要更新 svg 容器的宽度,使用 javascript 达到了预期的效果;但这很麻烦而且容易出错,因为我需要检查以确保在 svg 内添加任何新元素时,svg 容器会调整大小以适应。

任何帮助将非常感激。

html javascript css svg resize

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

PySpark 数字窗口分组依据

我希望能够按步长设置 Spark 组,而不仅仅是单个值。spark 中是否有类似于 PySpark 2.x 的window数字(非日期)值函数?

类似的东西:

sqlContext = SQLContext(sc)
df = sqlContext.createDataFrame([10, 11, 12, 13], "integer").toDF("foo")
res = df.groupBy(window("foo", step=2, start=10)).count()
Run Code Online (Sandbox Code Playgroud)

python aggregate-functions apache-spark pyspark pyspark-sql

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

从别名表急切加载关系时出现“不从元素链接”错误

查询表时,我想立即加载一组列。在 1.3.x 之前,我可以使用以下代码来完成此操作,但现在我得到:

sqlalchemy.exc.ArgumentError: Attribute "AliasedClass_Blueprint.engineer" does not link from element "mapped class
 Blueprint->blueprints".  Did you mean to use Building.blueprint.of_type(AliasedClass_Blueprint)?
Run Code Online (Sandbox Code Playgroud)

有问题的查询设置如下:

sqlalchemy.exc.ArgumentError: Attribute "AliasedClass_Blueprint.engineer" does not link from element "mapped class
 Blueprint->blueprints".  Did you mean to use Building.blueprint.of_type(AliasedClass_Blueprint)?
Run Code Online (Sandbox Code Playgroud)

该错误建议使用building.blueprint.of_type(blueprint),这似乎工作正常,但它看起来正在完成与所做的类似的事情alias=blueprint。是否of_type(x)替换alias=x参数?

下面是一个功能示例,其中包含一个工作函数和一个重现错误的函数:

def doQuery():
    building = aliased(Building)
    blueprint = aliased(Blueprint, name="blueprint")
    engineer = aliased(Engineer, name="engineer")

    with sessionScope() as session:
        return session.query(building)\
            .join(blueprint, blueprint.id==building.blueprintId)\
            .outerjoin(engineer, blueprint.engineerId==engineer.id)\
            .options(contains_eager(building.blueprint, alias=blueprint))\
            .options(contains_eager(building.blueprint, alias=blueprint)\
                 # The error shows up …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy

5
推荐指数
0
解决办法
393
查看次数