преобразование из mysql в mysqli - вывод переменных - PullRequest
0 голосов
/ 26 января 2009

Я использовал mysql api в PHP, и теперь я конвертирую в mysqli для повышения безопасности. Пример синтаксиса, который я видел, использует printf, и я хотел бы знать, если это необходимо. На данный момент я использую echo, вот так:

echo "<h1>".$row['ARTICLE_NAME']."</h1>
<div id='leftlayer' class='leftlayer'>
<p><strong>Username: </strong>".$row['USERNAME']."
<p><strong>Article Number: </strong>".$row['ARTICLE_NO']."
<p><strong>Subtitle: </strong>".$row['SUBTITLE']."
<p><strong>Auction Start: </strong>".$row['ACCESSSTARTS']." 
</div>";

Поскольку с помощью mysqli вы должны привязать переменные к результату, я сделал это так:

$getRecords->bind_result($ARTICLE_NO, $ARTICLE_NAME, $SUBTITLE$, $CURRENT_BID, $START_PRICE, $BID_COUNT, $QUANT_TOTAL, $QUANT_SOLD, $ACCESSSTARTS, $ACCESSENDS, $ACCESSORIGIN_END, $USERNAME, $BEST_BIDDER_ID, $FINISHED$, $WATCH$$, $BUYITNOW_PRICE, $PIC_URL, $PRIVATE_AUCTION, $AUCTION_TYPE, $ACCESSINSERT_DATE, $ACCESSUPDATE_DATE, $CAT_DESC$, $CAT_PATH, $ARTICLE_DESC, $COUNTRYCODE, $LOCATION$, $CONDITIONS, $REVISED$, $PAYPAL_ACCEPT, $PRE_TERMINATED, $SHIPPING_TO, $FEE_INSERTION, $FEE_FINAL$, $FEE_LISTING, $PIC_XXL$, $PIC_DIASHOW, $PIC_COUNT, $ITEM_SITE_ID); 

и хотел бы знать, могу ли я просто заменить ссылку на $ row на связанную переменную, например:

  <p><strong>Username: </strong>".$USERNAME."

Есть ли проблемы с безопасностью при таком подходе или все нормально

Ответы [ 4 ]

2 голосов
/ 27 января 2009

Я согласен с тем, что mysqli - по крайней мере в принципе - лучше, чем пакет mysql, потому что вы можете связывать параметры, что является одновременно более безопасным и лучшим для выполнения запросов. При этом, я обнаружил, по крайней мере, две серьезные проблемы с MySQL:

  • Ошибка 46808 - это серьезная проблема, о которой сообщалось по-разному в течение как минимум три года и до сих пор не устранена. Если вы хотите использовать столбцы LONGTEXT, у вас может быть проблема; и
  • Иногда я просто получаю странные ошибки, когда mysqli терпит неудачу (с бессмысленными сообщениями об ошибках в «канареечной форме» или что-то подобное). Именно в этот момент (в сочетании с (1)) мне просто пришлось отказаться от mysqli.

PDO, вероятно, лучший выбор. Мне? Я только что вернулся в MySQL. Трудно спорить с простотой, если вы осторожны с экранированием строк и т. Д.

1 голос
/ 26 января 2009

Я не уверен, что привязка делает ваше приложение более безопасным при получении данных из базы данных, однако это поможет при записи в БД, поскольку у вас не будет риска внедрения SQL.

Какой бы подход вы ни использовали для чтения из БД, вам все равно нужно экранировать вывод, используя htmlspecialchars(), если вы не совсем уверены, что данные полностью чисты. Связанный оператор не будет обрабатывать это, как вы предлагаете в своем комментарии к Ionut - вы должны экранировать данные таким образом, чтобы они соответствовали тому, где вы их выводите. PHP / MySQL не знает, печатаете ли вы в документ HTML / команду оболочки / json / и т.д. Не существует волшебного метода побега, который делает любые данные безопасными для любого носителя.

0 голосов
/ 26 января 2009

Я знаю, что сообщалось о некоторых уязвимостях переполнения буфера для определенных версий PHP. Я не знаю, какие версии, хотя. Таким образом, исходя из этого и предполагая, что входные данные не отфильтрованы должным образом, использование printf может быть менее безопасным, чем использование echo . Хотя многое зависит от контекста.

0 голосов
/ 26 января 2009

Вы должны избегать вывода при обслуживании страниц XML / HTML. Для этого используйте htmlspecialchars или htmlentities . В любом случае вы должны избегать вывода независимо от источника данных и API, используемого для извлечения этих данных.

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