我目前正在为服务器开发日志解析脚本,为了防止用户输入恶意命令,我需要过滤除字母数字字符以外的所有字符(同时允许下划线),但不幸的是我不知道该怎么做,所以我只是想知道如果有人能告诉/告诉我该怎么做才能实现这一点,谢谢!也作为一个例子,有人说输入以下内容:stack#@ _ over%flow,然后程序会过滤出非字母数字字符(除了下划线)以便产生正好的stack_overflow,这在bash中相当于如何过滤字符串,以便只允许字母数字字符通过
tr -dc [:alnum:]'_'
也忘了提,我曾尝试以下,但仍遇到的一些问题(例如,如果一个包含在字符串中,我得到“!”“-bash:!”:事件未找到”
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(int argc, char ** argv) {
int i;
char *p;
if (argc > 1) {
for (p = argv[1]; *p != '\0'; p++) {
if (islower(*p) || isdigit(*p) || *p == '_') {
putchar (*p);
}
}
putchar ('\n');
}
return 0;
}
也是我试图跟随,但它仍然有一些问题(如上图所示编辑) – lacrosse1991
如果您收到来自当你打电话给你的程序(这看起来不错,除了可以使用的字符isalnum)bash的错误,然后附上您程序参数用单引号括起来。 –