我有一个页面,如果出现在参数中则显示名称,否则显示输入名称的表单。
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>';
}
Run Code Online (Sandbox Code Playgroud)
您正在将任意文本($name)注入HTML,而无需先将其转换为HTML。
更换
print "Hello ${name}!";
Run Code Online (Sandbox Code Playgroud)
与
print escapeHTML("Hello ${name}!");
Run Code Online (Sandbox Code Playgroud)
每当连接字符串时(通过多次使用隐式进行的操作print),请一起考虑一下连接的内容。
如果将文本注入HTML,请先将其转换为HTML文本。
如果将文本注入SQL,请先将其转换为SQL文字。
如果将文本注入到shell命令中,请先将其转换为shell文字。
...
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |