使用以下代码是否会进行任何字符串注入

时间:2019-04-16 02:31:03

标签: perl

我有一个页面,如果存在于参数中,则显示名称,否则显示输入名称的表格。


my $name = $q->param('name');

print $q->header('text/html');
print '<!DOCTYPE html>';
print '<html lang="en">';
print '<head><title>Hello</title></head>';
print '<body>';

if (defined $name) {
    print "Hello ${name}!";
} else {
    print '<form method="post">';
    print 'Please enter your name:<br>';
    print '<input type="text" name="name"><br>';
    print '<input type="submit" value="Submit">';
    print '</form>';
}

1 个答案:

答案 0 :(得分:7)

您可以将injecting个任意文本($name)转换为HTML,而无需先将其转换为HTML。

替换

print "Hello ${name}!";

print escapeHTML("Hello ${name}!");

每当串联字符串时(通过多次使用print进行隐式操作),请一起考虑一下串联的情况。

如果将文本注入HTML,请先将其转换为HTML文本。
如果将文本注入SQL,请先将其转换为SQL文字。
如果将文本注入到shell命令中,请先将其转换为shell文字。
...