利用bash脚本参数可能吗?


9

我想将电子邮件地址从Web表单传递到bash脚本。我正在使用以下正则表达式:

/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/

这够了吗?还是可以嵌入漏洞利用程序?

该脚本是从PHP调用的:

system('/usr/local/bin/script.sh "$email"');

4
做得好,甚至问。我看不到有任何利用潜力,但您可能会拒绝一些有效的电子邮件地址,并接受一些无效的电子邮件地址。哦,您应该锚定正则表达式
通配符

1
@Wildcard确实,缺乏锚点使得正则表达式无法用作安全测试!
吉尔(Gilles)'所以

这可能是有效的电子邮件地址"the doctor"@gallifrey.com。请注意用户名组件中带引号的空格。
roaima

您在什么时候担心漏洞利用?主题行显示为“ bash”,因此在扩展$ email作为script.sh或(以script.sh处理传递的值的)加引号(或大概基于PHP的严格性)时将扩展作为电子邮件的关注点)正则表达式或???
杰夫·谢勒

目前尚不清楚在脚本中如何使用正则表达式。为了进行良好的分析,请提供脚本的相关部分。
jofel

Answers:


1

您可以使用PHP清理和验证电子邮件地址,这比调用Shell脚本更快,更安全。使用来自Web服务的未经消毒的数据调用Shell脚本只会增加另一件可能会中断的事情。

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.\n";
    echo "Before: $email\n";
    echo "After:  $sanitized_email\n";    
} else {
    echo "This sanitized email address is considered invalid.\n";
}

上面的示例改编自PHP.net站点上的示例

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.