我有一个页面,如果存在于参数中,则显示名称,否则显示输入名称的表格。
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>';
}
答案 0 :(得分:7)
您可以将injecting个任意文本($name
)转换为HTML,而无需先将其转换为HTML。
替换
print "Hello ${name}!";
与
print escapeHTML("Hello ${name}!");
每当串联字符串时(通过多次使用print
进行隐式操作),请一起考虑一下串联的情况。
如果将文本注入HTML,请先将其转换为HTML文本。
如果将文本注入SQL,请先将其转换为SQL文字。
如果将文本注入到shell命令中,请先将其转换为shell文字。
...