所以我知道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) 我试图在Perl中创建一个交互式shell脚本.
我能找到的唯一用户输入如下:
$name = <STDIN>;
print STDOUT "Hello $name\n";
Run Code Online (Sandbox Code Playgroud)
但在此,用户必须始终按Enter键才能使更改生效.如何在按下按钮后立即启动程序?
我刚开始学习我的第一个真正的编程语言Python.我想知道如何将用户输入限制raw_input为特定字符和一定长度.例如,如果用户输入的字符串包含除字母以外的任何内容,我想显示错误消息,如果a-z用户输入超过15个字符,我想显示一个错误消息.
第一个似乎是我可以用正则表达式做的事情,我知道一点,因为我在Javascript中使用它们,但我不确定如何在Python中使用它们.第二个,我不知道如何处理它.有人可以帮忙吗?
我的(基于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并没有找到很多有希望的东西,但是我觉得我错过了一些东西.
我不确定这个问题是否已在其他地方得到解答,我似乎无法通过谷歌找到任何不是"Hello World"示例...我在C#.NET 4.0中进行编码.
我正在尝试开发一个控制台应用程序,它将打开,显示文本,然后等待用户输入命令,其中命令将运行特定的业务逻辑.
例如:如果用户打开应用程序并输入"help",我想显示一些语句等等.我不知道如何为用户输入编写"事件处理程序"代码.
希望这是有道理的.任何帮助将非常感激!干杯.
这是一个年轻的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) 我想允许提交小的用户定义的正则表达式进行测试.但是,从失控服务器使用到更恶习的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) 我发现的现有答案都是基于from_str(例如 有效地从控制台读取用户输入),但显然from_str(x)已经改变为x.parse()Rust 1.0.作为一个新手,考虑到这一变化,原始解决方案应该如何适应并不明显.
从Rust 1.0开始,从用户那里获取整数输入的最简单方法是什么?
我正在尝试为仅接受数字和加号(+)的电话号码构建自定义文本输入; 所有其他角色需要丢弃并且不在场上显示.
我试图使用事件处理程序(onkeydown/onkeypress)并丢弃与其他键对应的输入.但是,我无法想出一种跨浏览器的方式来做到这一点.以下是我尝试过但不起作用的方法:
使用onkeypress事件并查看event.key以确定按下了哪个键:在Chrome上不起作用(请参阅http://caniuse.com/keyboardevent-key).有没有跨浏览器的解决方法?
使用onkeycode事件并查看event.keyCode:当我们需要按多个键来打印字符时不起作用(例如,英文键盘布局需要按Shift和=给+).此外,它允许显示!@#$%&*()等字符,因为按Shift和数字时会出现这些字符.(这是JavaScript代码中遵循的方法仅允许数字和加号,但它对我帮助不大;))
使用HTML模式属性:这似乎并不能阻止人们写出他们想要的任何内容.
谢谢!
我正在尝试编写一个程序,其中一个数字从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)