Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对于非常基本的降价,这些正则表达式可以工作吗?_Php_Mysql_Regex_Code Injection - Fatal编程技术网

Php 对于非常基本的降价,这些正则表达式可以工作吗?

Php 对于非常基本的降价,这些正则表达式可以工作吗?,php,mysql,regex,code-injection,Php,Mysql,Regex,Code Injection,关于正则表达式的一个简单问题:这段代码对我需要做的任何修饰都有效吗?(即,能否将其输入数据库并确保安全?) 函数markdown2html($text){ $text=htmlspecialchars($text,ENT_引号,'UTF-8'); //强烈强调 $text=preg_replace('/.+?)\u_/s','$1',$text); $text=preg\u replace('/\*\*(.+?)\*\*\*/s','$1',$text); //下划线 $text=preg_re

关于正则表达式的一个简单问题:这段代码对我需要做的任何修饰都有效吗?(即,能否将其输入数据库并确保安全?)

函数markdown2html($text){
$text=htmlspecialchars($text,ENT_引号,'UTF-8');
//强烈强调
$text=preg_replace('/.+?)\u_/s','$1',$text);
$text=preg\u replace('/\*\*(.+?)\*\*\*/s','$1',$text);
//下划线
$text=preg_replace(“/”([^]+)/”,“

$1

”,$text); //斜体 $text=preg\u replace('/\*([^\*]+)\*/','$1',$text); //Windows到Unix $text=str_replace('\r\n','\n',$text); //Macintosh到Unix $text=str_replace('\r','\n',$text); //段落 $text=''.str\u replace(“\n\n”,”

',$text)。“

”; $text=str_replace(“\n”,”
,$text); //[链接文本](Url) $text=preg\u replace('/\[([^\]]+)]\([a-z0-9.\:\/?\\@!$&'()*+,;=%]+)\)/i','','','',$text); 返回$text; }
否,数据通过该功能后无法保证安全

您需要转义sql敏感字符或使用PDO/Mysqli。无论如何,预先准备好的语句要方便得多

不要使用老方法将查询拼凑在一起,即:

$query = 'select * from table where col = '.$value;
你只是在自找麻烦。

不,绝对不是

您的代码与SQL无关——它根本不修改
'
\
字符。将此函数的格式化功能与SQL转义混合在一起是愚蠢的


在某些情况下,您的代码也可能引入HTML注入——我特别怀疑URL链接正则表达式。如果没有合适的解析器,我一点也不相信它。

我突然想到了两件事:

我相信前两个正则表达式(
'/\uuu(+?)\ uuuuuu/s'
和对应的
*
)不正确地处理了单词和***单词***–它们将第三个字符视为单词的一部分,因此您将得到*单词*(其中第一个*是粗体,后面一个不是)而不是单词

关于第三个(
“/”([^\u]+)\ u/”
),它真的适合于

不要那样做

变成

不要那样做

?


当然,我不是说如果你解决了这些问题,就可以使用它。

你为什么不。。。在测试中尝试它,只是想知道它是否会停止SQL注入。为什么考虑注入?您是否使用了过时的mysql库?@James这对SQL注入没有影响。如果你想得到更好的保护,一定要使用PDO。我强烈建议你将Markdown放到数据库中,并在退出时解析它。然后您可以更改降价实现。此外-如果用户想要编辑他们的帖子怎么办?
$query = 'select * from table where col = '.$value;