Viewing 11 replies - 1 through 11 (of 11 total)
  • Plugin Author Lester Chan

    (@gamerz)

    Thanks for the tip, I can’t remove that because it that prevents a security hole for Linux.

    Thread Starter Gregory Karpinsky (@tivnet)

    (@tivnet)

    OK, here is the reason:

    If the path looks like this (with spaces):

    C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe

    then $backup['mysqldumppath'] already has double quotes around it

    "C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe"

    You add $brace without checking that the quotes already there, so it becomes

    ""C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe""

    and then, after the escapeshellcmd, it looks like:

    "^"C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe^""

    So, I guess, the fix could lie in checking for double-bracing.

    Plugin Author Lester Chan

    (@gamerz)

    Hmm your $backup['mysqldumppath'] has double quotes itself in the settings page?

    Thread Starter Gregory Karpinsky (@tivnet)

    (@tivnet)

    Here is the field content:

    a:16:{s:13:"mysqldumppath";s:57:"C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe";s:9:"mysqlpath";s:53:"C:/Program Files/MySQL/MySQL Server 5.6/bin/mysql.exe";
    ...
    Thread Starter Gregory Karpinsky (@tivnet)

    (@tivnet)

    OK, I believe what I wrote before was confusing. Forget it.

    All is very simple:

    escapeshellcmd(‘”notepad”‘)

    returns “^”notepad^””

    (Windows 8.1, PHP 5.5)

    So, the real question is why need to $brace ?

    Plugin Author Lester Chan

    (@gamerz)

    I agree!

    If you replace https://github.com/lesterchan/wp-dbmanager/blob/master/database-backup.php#L27 with $brace = ”, does it work?

    I need to be sure first before I remove it since I don’t have access to a windows computer

    Thread Starter Gregory Karpinsky (@tivnet)

    (@tivnet)

    No Lester, braces are needed because of the spaces in the “Program Files”… path. Not sure, by the way, why you do not need them in UNIX.
    You can create mkdir "a b c" folder.
    Then try
    php -r “echo escapeshellcmd(‘a b c/mysql’);”
    – it will keep the spaces.

    So, I believe, the $brace is OK, but not before escaping. After. This way:

    $backup['command'] = $brace . escapeshellcmd( $backup['mysqldumppath'] ) . $brace . ' --force --host=' . escapeshellarg( $backup['host'] ) . ' --user=' . escapeshellarg( DB_USER ) . ' --password=' . escapeshellarg( DB_PASSWORD ) . $backup['port'] . $backup['sock'] . $backup['charset'] . ' --add-drop-table --skip-lock-tables ' . DB_NAME . ' > ' . $brace . escapeshellcmd( $backup['filepath'] ) . $brace;
    Plugin Author Lester Chan

    (@gamerz)

    Got it, thanks for your patience and the explanation, I will fix it.

    Plugin Author Lester Chan

    (@gamerz)

    I fixed it for the next version, could you let me know if it works? https://github.com/lesterchan/wp-dbmanager/archive/master.zip

    Thread Starter Gregory Karpinsky (@tivnet)

    (@tivnet)

    Works OK on my Win machine, Lester.

    Did you try placing mysqldump binary into a folder with spaces on Linux?

    Plugin Author Lester Chan

    (@gamerz)

    Nope not yet =) but without spaces works fine, I will try with spaces.

Viewing 11 replies - 1 through 11 (of 11 total)

The topic ‘escapeshellcmd on Windows’ is closed to new replies.