标签: unsafe

如何确保T可以按固定的字节数进行序列化?

我正在写一个DataStructure<T>持久存在磁盘上的通用,我需要写它,T以保证可以在固定的字节数中序列化.例如,int并且char应该被接受,但string还是int[]不应该.同样,struct带有string成员的a 是不可接受的,但unsafe struct带有fixed char数组的是.

我可以使用反射在初始化程序中编写运行时测试并sizeof测试每个成员,但这似乎是一个可怕的黑客.有没有有效的(相对)安全的方法来做到这一点?

c# generics struct unsafe

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

C#中的结构指针初始化

unsafe public class Temp
{
    public struct Node
    {
        Node *left;
        Node *right;
        int value;
    }

    public Temp()
    {
        Node* T=new Node();
        T->left=null;
        T->right=null;
        T->value=10;
    }
}

main()
{
    Temp temp=new Temp();
}
Run Code Online (Sandbox Code Playgroud)

它给出了Object引用未设置为对象实例的错误.当我想制作AVL树程序(我用C++创建并测试但在C#中复制时出错)时,我怎么能这样做?

c# struct pointers unsafe

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

使用Erlang沙盒用户代码

据我所知,Erlang提供了错误处理和进程隔离的高级功能.

我正在构建一个系统,允许用户提交他们的代码以便在共享服务器环境中执行,并且需要使其安全.

要求是:

  • 限制每个用户进程的CPU和内存使用量.
  • 禁止用户进程与其他进程通信(除了为此目的专门设计的某些进程).
  • 禁止访问所有系统资源(shell,文件系统,...).
  • 在出现错误或高资源消耗的情况下终止用户进程.

是否可以通过Erlang实现所有这些并保持其性能效率?

erlang unsafe sandbox

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

使用不安全的代码发布Web应用程序

我正在尝试发布一个Web应用程序(使用VS2012 Web),我需要在其中运行vb脚本.

该脚本目前无法正常运行,可能是因为缺少权限.我目前正在尝试以用户身份运行它并提供一些凭据.我必须提供的密码必须在一个System.Security.SecureString需要创建char*的密码中.

当我在调试中运行我的应用程序时,一切正常并且符合预期.但到了将应用程序发布到服务器的时候,它说:

1>C:\SVN\...\Default.aspx.cs(108,21,108,27): error CS0227: Unsafe code may only appear if compiling with /unsafe

我已经允许在项目属性中使用不安全的代码,但我不知道为什么VS在调试时看到该属性而不是在发布时看到.

当我点击发布时,我在错误列表中看到CS0227错误,但它只停留了1秒,然后它就消失了......似乎第二个足以使构建失败.

关于问题是什么的任何想法?

这是我的代码:

Process proc = new Process();
ProcessStartInfo psi = new ProcessStartInfo("C:\\Windows\\System32\\cscript.exe", "\"" + scriptPath + "\" " + args);
psi.UseShellExecute = false;
psi.RedirectStandardInput = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.CreateNoWindow = true;

psi.Domain = "MyDomain";
psi.UserName = "MyUsername";

System.Security.SecureString hashPwd;

unsafe
{
    // Instantiate a new secure string. 
    fixed (char* pChars = pwd)
    {
        hashPwd = new …
Run Code Online (Sandbox Code Playgroud)

c# asp.net unsafe publishing

5
推荐指数
3
解决办法
4653
查看次数

在OS X 10.9.0 Mavericks不安全模式下,允许访问java applet的文件系统

随着新的10.9.0 Mavericks来自Apple的OS X在Safari中为浏览器java applet带来了很多麻烦.

要允许访问使用文件选择器和访问文件系统的applet的本地文件系统,用户必须进入插件设置并选择运行UNSAFE MODE.

虽然这是Apple为应用程序和客户端提供的"安全功能",但这些引起了人们的关注,并会问为什么应用程序不安全.Ť

对于开发人员/产品所有者而言,即使applet签名,合法且在一个受人尊敬的网站上,这也是一个非常困难的情况.Codebase,Caller-Allowable-Codebase已正确设置.

我的问题,是否有可能在Safari浏览器中绕过此设置,通过使用任何清单文件属性或其他方式激活它.

java applet unsafe osx-mavericks

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

了解不安全的代码及其用途

我正在阅读ECMA-334,正如一位以编程为生的朋友所建议的那样.我在处理不安全代码的部分.虽然,我对他们所谈论的内容感到有点困惑.

C#下面的垃圾收集器可能通过在内存中移动对象来工作,但这种移动对于大多数C#开发人员来说是不可见的.对于通常满足于自动内存管理但有时需要细粒度控制或额外性能的开发人员,C#提供了编写"不安全"代码的能力.这样的代码可以直接处理指针类型和对象地址; 但是,C#要求程序员修复对象以暂时阻止垃圾收集器移动它们.从开发人员和用户的角度来看,这种"不安全"的代码功能实际上是一种"安全"功能.代码中的不安全代码应使用修饰符unsafe清楚地标记,因此开发人员不可能意外地使用不安全的语言功能,并且编译器和执行引擎一起工作以确保不安全的代码不能伪装成安全代码26 8 9BLanguage概述.这些限制将不安全代码的使用限制在代码受信任的情况下.

这个例子

using System;
class Test
{
    static void WriteLocations(byte[] arr)
    {
        unsafe
        {
            fixed (byte* pArray = arr)
            {
                byte* pElem = pArray;
                for (int i = 0; i < arr.Length; i++)
                {
                    byte value = *pElem;
                    Console.WriteLine("arr[{0}] at 0x{1:X} is {2}",
                    i, (uint)pElem, value);
                    pElem++;
                }
            }
        }
    }
    static void Main()
    {
        byte[] arr = new byte[] { 1, 2, 3, 4, 5 };
        WriteLocations(arr);
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

在名为WriteLocations的方法中显示一个不安全的块,它修复了一个数组实例,并使用指针操作迭代元素.每个数组元素的索引,值和位置都写入控制台.一个可能的输出示例是:

arr[0] at 0x8E0360 is …
Run Code Online (Sandbox Code Playgroud)

c# arrays unsafe memory-address

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

在Go中调用kernel32的ReadProcessMemory

我正在尝试使用Go语言操作Windows上的进程,我开始通过使用来阅读其他进程的内存ReadProcessMemory.

但是,对于大多数地址,我都会收到Error: Only part of a ReadProcessMemory or WriteProcessMemory request was completed.错误.也许我的论据清单是错误的,但我找不到原因.

谁能指出我在这里做错了什么?

package main

import (
  "fmt"
)

import (
  windows "golang.org/x/sys/windows"
)

func main() {
  handle, _ := windows.OpenProcess(0x0010, false, 6100) // 0x0010 PROCESS_VM_READ, PID 6100
  procReadProcessMemory := windows.MustLoadDLL("kernel32.dll").MustFindProc("ReadProcessMemory")

  var data uint   = 0
  var length uint = 0

  for i := 0; i < 0xffffffff; i += 2 {
    fmt.Printf("0x%x\n", i)

    // BOOL ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead) …
Run Code Online (Sandbox Code Playgroud)

interop unsafe ffi go kernel32

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

angular2和window.URL.createObjectURL

我使用window.URL.createObjectURL来创建一个blob:http链接,用于预览img标签中的所选图像:

<img src=""{{itemPhoto}}"" />
Run Code Online (Sandbox Code Playgroud)

itemPhoto是在组件中定义的字段,在选择图像文件时分配:

selectPhoto(photos: any[]) {
    if (photos[0]) {
      this.itemPhoto = window.URL.createObjectURL(photos[0]);
    }
  }
Run Code Online (Sandbox Code Playgroud)

这适用于angular2 RC1但不再适用于2.0.0.

以下是进入src属性的内容:

unsafe:blob:http://localhost:5555/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

在阅读其他一些帖子后我尝试了以下内容:

this.itemPhoto = this.sanitizer.bypassSecurityTrustUrl(window.URL.createObjectURL(photos[0]));
Run Code Online (Sandbox Code Playgroud)

然后以下内容进入src属性:

unsafe:SafeValue must use [property]=binding: blob:http://localhost:5555/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxx (see http://g.co/ng/security#xss)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

非常感谢

更新:好的,我真的不明白src里面的错误信息:"unsafe:SafeValue必须使用[property] = binding:..."

而不是src={{itemPhoto}},以下工作:

<img [src]="itemPhoto" />
Run Code Online (Sandbox Code Playgroud)

仍然不确定为什么.

unsafe blob angular

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

如何在jdk8和jdk9上使用不安全的java8代码?

sun.misc.Unsafe在我的Java8代码库中使用.这不适用于Java9.

我想修复Java9,但使用与Java8相同的代码库.如果我放module-info.java,它将无法工作,因为我的代码库是Java8.

该怎么办?

java unsafe java-8 java-9 module-info

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

为什么不安全.Sizeof被认为是不安全的?

考虑以下:

import (
    "log"
    "unsafe"
)

type Foo struct {
    Bar int32
}

func main() {
    log.Println(int(unsafe.Sizeof(Foo{})))
}
Run Code Online (Sandbox Code Playgroud)

为什么确定变量的大小被认为是不安全的,以及不安全包的一部分?我不明白为什么获取任何类型的大小是一个不安全的操作,或者使用什么机制来确定其大小,这是必要的.

我还想知道是否有任何替代不安全包来确定已知结构的大小.

unsafe go

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