标签: user-input

是否需要从数据库中转义用户输入?

所以我知道MySQL注入并在将它放入我的数据库之前总是转义我的所有用户输入.但是我想知道,想象一个用户试图提交一个查询注入,我逃避它.如果我稍后从数据库中获取此值并在查询中使用它,该怎么办?我必须再次逃脱吗?

所以:( sql::escape()包含我的转义功能)

$userinput = "'); DROP `table` --";
mysql_query("INSERT INTO `table` 
             (`foo`,`bar`) 
             VALUES 
             ('foobar','".sql::escape($userinput)."')");

// insert php/mysql to fetch `table`.`bar` into $output here

mysql_query("INSERT INTO `table2` 
            (`foo`,`bar`) 
            VALUES
            ('foobar','".$output."')");
Run Code Online (Sandbox Code Playgroud)

MySQL会自动转义它们的输出还是类似的东西,还是应该在第二个查询中转义?

这是一个测试用例,但这在我的程序中以其他方式发生,我想知道这样的情况下安全性有多紧.

编辑

我的逃生功能

static function escape($string){

    if(get_magic_quotes_gpc()) 
        $string = stripslashes($string); 

    return mysql_real_escape_string($string);

}
Run Code Online (Sandbox Code Playgroud)

php mysql user-input sql-injection escaping

15
推荐指数
2
解决办法
6306
查看次数

如何在不等待进入Perl的情况下获得用户输入?

我试图在Perl中创建一个交互式shell脚本.

我能找到的唯一用户输入如下:

 $name = <STDIN>;
 print STDOUT "Hello $name\n";
Run Code Online (Sandbox Code Playgroud)

但在此,用户必须始终按Enter键才能使更改生效.如何在按下按钮后立即启动程序?

perl user-input

14
推荐指数
2
解决办法
8608
查看次数

将Python输入字符串限制为某些字符和长度

我刚开始学习我的第一个真正的编程语言Python.我想知道如何将用户输入限制raw_input为特定字符和一定长度.例如,如果用户输入的字符串包含除字母以外的任何内容,我想显示错误消息,如果a-z用户输入超过15个字符,我想显示一个错误消息.

第一个似乎是我可以用正则表达式做的事情,我知道一点,因为我在Javascript中使用它们,但我不确定如何在Python中使用它们.第二个,我不知道如何处理它.有人可以帮忙吗?

python string user-input limit

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

如何安全地使用用户输入的正则表达式?

我的(基于Perl的)应用程序需要让用户输入正则表达式,以匹配幕后的各种字符串.到目前为止,我的计划是将字符串包装成类似的东西

$regex = eval { qr/$text/ };
if (my $error = $@) { 
   # mangle $error to extract user-facing message
Run Code Online (Sandbox Code Playgroud)

($text提前删除了换行符,因为它实际上是多行文本字段中的多个正则表达式split).

这样做是否存在任何潜在的安全风险 - 一些可能导致任意代码执行的奇怪输入?(除了CVE-2007-5116等正则表达式引擎中的缓冲区溢出漏洞).如果是这样,有没有办法减轻它们?

有一个更好的方法吗?任何Perl模块都有助于抽象将用户输入转换为正则表达式的操作(例如提取错误消息......或提供修饰符/i,我不在这里严格要求,但会很好)?我搜索了CPAN并没有找到很多有希望的东西,但是我觉得我错过了一些东西.

regex security perl user-input

13
推荐指数
3
解决办法
1672
查看次数

'高级'控制台应用程序

我不确定这个问题是否已在其他地方得到解答,我似乎无法通过谷歌找到任何不是"Hello World"示例...我在C#.NET 4.0中进行编码.

我正在尝试开发一个控制台应用程序,它将打开,显示文本,然后等待用户输入命令,其中命令将运行特定的业务逻辑.

例如:如果用户打开应用程序并输入"help",我想显示一些语句等等.我不知道如何为用户输入编写"事件处理程序"代码.

希望这是有道理的.任何帮助将非常感激!干杯.

c# console user-input event-handling

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

如果用户输入非数字字符,如何仅扫描整数并重复读取?

这是一个年轻的tyro问题,C代码试图阻止用户输入一个小于0或大于23的字符或整数.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    const char *input;
    char *iPtr;
    int count = 0;
    int rows;

    printf("Enter an integer: ");
    scanf("%s", input);
    rows = strtol(input, &iPtr, 0);
    while( *iPtr != '\0') // Check if any character has been inserted
    {
        printf("Enter an integer between 1 and 23: ");
        scanf("%s", input);
    }
    while(0 < rows && rows < 24) // check if the user input is within the boundaries
    {
        printf("Select an integer from 1 to 23: "); …
Run Code Online (Sandbox Code Playgroud)

c validation user-input

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

PHP - 这是一种允许用户提供的正则表达式的安全方法

我想允许提交小的用户定义的正则表达式进行测试.但是,从失控服务器使用到更恶习的eval()使用还有许多问题需要考虑.

据我所知,我已经处理了以下代码中我能想到的所有问题.他们没有想到的任何攻击媒介吗?(我知道一个相当天真的问题)

function testRegex($regex)
{
    // null character allows a premature regex end and "/../e" injection
    if (strpos($regex, 0) !== false || ! trim($regex)) {
        return false;
    }

    $backtrack_limit = ini_set('pcre.backtrack_limit', 200);
    $recursion_limit = ini_set('pcre.recursion_limit', 20);

    $valid = @preg_match("~$regex~u", null) !== false;

    ini_set('pcre.backtrack_limit', $backtrack_limit);
    ini_set('pcre.recursion_limit', $recursion_limit);

    return $valid;
}


$regexes = array(
    "InvalidRegular)Expression",
    '',
    '\w+',
    '\/\w+/',
    'foo[bar]*',
    '\/\x00known/e' . chr(0x00) . chr(0),
    'known~e' . chr(0),
    'known~e' . chr(0x00),
    '[a-z]+',
    '\p{Lu}+',
);


foreach($regexes as $regex) {
    var_dump($regex, testRegex($regex));
} …
Run Code Online (Sandbox Code Playgroud)

php regex sanitization user-input remote-execution

13
推荐指数
1
解决办法
418
查看次数

如何在Rust 1.0中读取用户的整数输入?

我发现的现有答案都是基于from_str(例如 有效地从控制台读取用户输入),但显然from_str(x)已经改变为x.parse()Rust 1.0.作为一个新手,考虑到这一变化,原始解决方案应该如何适应并不明显.

从Rust 1.0开始,从用户那里获取整数输入的最简单方法是什么?

integer user-input input rust

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

仅包含数字和+符号的HTML输入

我正在尝试为仅接受数字和加号(+)的电话号码构建自定义文本输入; 所有其他角色需要丢弃并且不在场上显示.

我试图使用事件处理程序(onkeydown/onkeypress)并丢弃与其他键对应的输入.但是,我无法想出一种跨浏览器的方式来做到这一点.以下是我尝试过但不起作用的方法:

  • 使用onkeypress事件并查看event.key以确定按下了哪个键:在Chrome上不起作用(请参阅http://caniuse.com/keyboardevent-key).有没有跨浏览器的解决方法?

  • 使用onkeycode事件并查看event.keyCode:当我们需要按多个键来打印字符时不起作用(例如,英文键盘布局需要按Shift和=给+).此外,它允许显示!@#$%&*()等字符,因为按Shift和数字时会出现这些字符.(这是JavaScript代码中遵循的方法仅允许数字和加号,但它对我帮助不大;))

  • 使用HTML模式属性:这似乎并不能阻止人们写出他们想要的任何内容.

谢谢!

html javascript validation user-input

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

你如何编写一个C程序来通过按键递增一个数字并每秒自动递减一次?

我正在尝试编写一个程序,其中一个数字从0开始,但当你按任意键时,它会增加1.如果没有按任何一个,它会继续每秒减少1,直到它达到0.每个增量或递减显示在控制台窗口中.

我的方法的问题是,在我按下一个键之前没有任何反应(也就是说,它检查是否有任何按下getch()).如何检查没有按下任何内容?当然,!getch()不起作用,因为要工作,它仍然需要检查按键,这会使目的本身无效.

操作系统:Windows 10企业版,IDE:代码::块

void main()
{
    int i, counter = 0;
    for (i = 0; i < 1000; i++)
    {
        delay(1000);
        // if a key is pressed, increment it
        if (getch())
        {
            counter += 1;
            printf("\n%d", counter);
        }
        while (counter >= 1)
        {
            if (getch())
            {
                break;
            }
            else
            {
                delay(1000);
                counter--;
                printf("\n%d", counter);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c windows user-input

13
推荐指数
2
解决办法
2530
查看次数