- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是好奇这个。 strtol
不需要您指定要处理的字节数,因此理论上它可能会被提供一个包含无穷无尽的数字序列的字符串以供使用,从而导致拒绝服务攻击。当然,一旦意识到 long 的精度已经用尽(实际上不可能超过二进制数的 65 个字符),就很容易受挫,没有任何进一步阅读的意义。
但是,strtol
还需要根据需要丢弃尽可能多的空白字符,直到遇到第一个非空白字符。那么即使它在读取数字方面很聪明,它也不会受到无穷无尽的空白字符串的攻击吗?
最佳答案
However, strtol is also required to discard as many whitespace characters as necessary until the first non-whitespace character is encountered. So could it not be attacked with an endless whitespace string even if it is smart about reading digits?
由于 strtol
对内存中已有的字符串起作用,因此您必须在之前存储(并从攻击者那里读取)“无穷无尽”的空白(或忘记以 NUL 终止您的字符串)甚至把它喂给 strtol。
由于实现可以不断计算有效字符串中可能存在的最大位数,因此它不必像您怀疑的那样继续计算。
DOS 攻击可能会因实现错误而发生,请查看 this相关案例(这是在 java 和 PHP 中读取 double 时的情况,但在 C 或 C++ 实现中也可能发生)。
关于c - `strtol` 的实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7457163/
我编写了以下词法分析器。它适用于以下输入:c&3&f、(3|6)&c、f^1。然而,我得到的 strtol 结果并不一致。当我运行 #include #include //Max number
我正在使用 strtol 从字符串中解析整数。我打算使用 strtol 的第二个参数来确定整个字符串是否被解析为数字。我有这样的代码(字符串永远不会代表 token; const size_t tok
strtol 规范在概念上将输入字符串分为“初始空白”、“主题序列”和“最终字符串”,并将“主题序列”定义为: the longest initial subsequence of the input
我只是好奇这个。 strtol 不需要您指定要处理的字节数,因此理论上它可能会被提供一个包含无穷无尽的数字序列的字符串以供使用,从而导致拒绝服务攻击。当然,一旦意识到 long 的精度已经用尽(实际上
关闭。这个问题需要 details or clarity 。目前不接受答案。 想要改进这个问题?通过 editing this post 添加详细信息并澄清问题。 已关闭 5 年前。 奥 git _a
这周我刚刚开始学习c。 我正在尝试将单个字符转换为 long/int。 我的问题是,当我通过 main 调用 convenrtCharToInt 时,它返回正确的值,但是当我通过另一个函数调用此函数,
我有这段代码,应该可以正常运行,但由于某种原因,当我在循环的条件检查之前释放字符串时,循环会循环。摆脱循环的唯一方法是给出超过 3 位的整数(输入 > 99 || 输入 #include #inc
当我使用 strtol() 函数时,当我尝试转换时: 2015-08-12 我希望它转换失败而不是仅转换 2015? int main(int argc, char *argv[]) { p
使用指针: char a[]=" 0xa this is a343 good"; char* *endptr=NULL; long int b=0; b=strtol(a,endptr,0); b=s
您好,我制作了一个测试程序,以便在我对以下代码使用 valgrind --track-origins=yes -v ./a.out 时获得如何解决问题的帮助它返回以下错误; ==13192== 1 e
有人可以帮助我理解为什么我看到相同输入的不同输出吗? “n”的输出是 2147483647,这是不正确的。为什么? --------输出------------ FF FF FF FF FFFFFF
strtol 的第二个参数是如何工作的? 这是我尝试过的: strtol(str, &ptr, 10) 其中 ptr 是一个 char * 而 str 是一个字符串。现在,如果我将 str 作为 '3
所以我有两个十六进制字符串 - "3b101c091d53320c000910" 和 "071d154502010a04000419"。当我对它们使用 strtol() 时,我得到两个字符串的相同值。
我正在尝试使用以下代码使用 strtol 将字符数组转换为整数: int foo = strtol(temp, (char **)NULL, 0); 其中温度 = 4000000010 但是 strt
这个问题在这里已经有了答案: strtol using errno (5 个答案) 关闭 8 年前。 基本上使用 strtol 来检查不成功的转换,我正在使用函数 width = (int) st
我真的很困惑。我必须遗漏一些相当简单的东西,但我读到的关于 strtol() 的内容没有任何意义。有人可以用一种非常基本的方式为我阐明它,并举例说明我如何使类似以下的东西起作用吗? string in
根据 C11 (n1570) 中的 § 7.22.1.4,必须声明 strtol: #include long int strtol (const char *restrict nptr,
此代码似乎按预期工作,使用单个指针填充数字数组 #include #include #include int main(void) { int arr[4], count = 0, i;
我这里有一个奇怪的。当我传入以下字符串时,strtol、atol 和 atoi 都返回不正确的值: long test = strtol("3087663490", &p, 10); 根据我的调试器,
我正在围绕 strtol() 创建一个包装函数对于 int16_t ,我遇到了一个问题:如何处理 0x 这样的输入?也就是说,它作为数字有效吗 0 , 后跟非数字 x , 或者它是无效的因为后面没有任
我是一名优秀的程序员,十分优秀!