Как передать '#' без кодирования в службу WCF? - PullRequest
1 голос
/ 14 июня 2019

У меня есть служба WCF, и у меня возникла проблема при передаче строки запроса с символом «#» в (_password = ... #), что делает запрос игнорирующим оставшуюся часть URL.

Я пытался переписать правило URL, но все равно

<rewrite>
  <rules>
    <rule name="rule1">
      <match url="(.*)" />
      <conditions>
        <add input="{REQUEST_URI}" pattern="(.*)#(.*)" />
      </conditions>
      <action type="Redirect" url="{C:1}%23{C:2}" />
    </rule>
  </rules>
</rewrite>

Я также добавил

<system.net>
<settings>
  <httpListener unescapeRequestUrl="false"/>
</settings>

<uri>
<schemeSettings>
  <add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
  <add name="https" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
</schemeSettings>

<system.web>   
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0"/> 
<pages validateRequest="false" controlRenderingCompatibilityVersion="4.0"/>

Но проблема все еще остается.

1 Ответ

1 голос
/ 15 июня 2019

Короткий и простой ответ:

Вы не должны, не можете, и, скорее всего, не сможете.

Каждый веб-ориентированный язык имеет метод кодирования и декодирования URL дляхорошая причина.Одной из причин являются зарезервированные символы, такие как #, которые потенциально могут нарушить работу интернета, если они не будут использоваться последовательно.

Так что вы всегда должны кодировать и декодировать URI / URL и строки запросов.

Во-вторых, это выглядит такВы беспокоитесь о своих паролях символов.Пока вы используете Url Decode, это не должно иметь никакого значения!

пример кода может выглядеть следующим образом:

bool validCredentials(string uName, string pWord)
{
    var user = GetUser(uName);
    return uName == user.Name && pWord = server.UrlDecode(Request.QueryString["password"]);
}

Наконец, и не имеет прямого отношения: вы не должны передавать пароль в URL / запросе ... когда-либо. Это один из самых простыхбиты трафика, чтобы нюхать и перехватывать как «плохой парень».Делая это, вы в основном выбрасываете бесплатную безопасность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...