Комментарии 10
Делаем однобуквенный ник и получаем чужие донаты, чей ник начинается с этой же буквы.
#Приорбетенная вещь
[string]$Item = $i.item_name
#Количество вещей
[UInt16]$Quantity = $i.Quantity
Эта информация отправляется с html страницы? Тогда пользовтаель сможет её подменить и получить любую вещь в любом количестве.
А если бы в майнкрафте можно было разделять команды, то пользователь смог бы любую команду запустить с правами админа/модератора (или чьи права дает RCON?)
# $i.Quantity = '; gamemode creative @a'
#Составляем команду
$Command = '"' + "give " + $i.Player + " " + $i.Item + " " + $i.Quantity + '"'
Делаем однобуквенный ник и получаем чужие донаты, чей ник начинается с этой же буквы.Хорошее замечание, нужно фиксить.
Эта информация отправляется с html страницы? Тогда пользовтаель сможет её подменить и получить любую вещь в любом количестве.Нет, вся информация хранится на стороне PayPal, спуфинг невозможен.
А если бы в майнкрафте можно было разделять команды, то пользователь смог бы любую команду запустить с правами админа/модератора (или чьи права дает RCON?)RCON имеет права консоли. То есть админа. Хорошая догадка, но опять же, вся информация хранится платежной системой.
Почитал про IPN. У вас чуть ли не все возможные пункты безопасности нарушены.
https://developer.paypal.com/docs/ipn/integration-guide/IPNIntro/#ipn-protocol-and-architecture
- Сервер MC и IPN Listener расположены на одном ip. А зная ip адрес листенера пользователь может сам иницировать POST запрос с нужными данными. Нужно проверять от кого запрос, или делать ссылку с рандомным патчем и проверять его:
example.com?secret=fdf7sajsaklfj8saur32nnf82jr5298
- Paypal не даёт гарантии что не будет повторного запроса с тем же id транзакции. Нужно его сохранять и проверять.
- Paypal может отправить запрос раньше времени, нужно проверять чтобы статус был "completed". Так же paypal отправляет запросы о других событиях, таких как chargeback. В текущей реализации скрипт воспримет возврат средств как новое поступление.
- Нужно проверять сумму платежа, потому что если "PayPal payment button" не защищена, то пользователь может отправить сумму меньше запрашиваемой.
Сервер MC и IPN Listener расположены на одном ip. А зная ip адрес листенера пользователь может сам иницировать POST запрос с нужными данными. Нужно проверять от кого запрос, или делать ссылку с рандомным патчем и проверять его:Именно для этого в файл config.ps1 нужно ввести свой url. Listener не слушает запросы по своему ip адресу, если его не задать в качестве http префикса.
Paypal не даёт гарантии что не будет повторного запроса с тем же id транзакции. Нужно его сохранять и проверять.Если дать ему статус 200 OK в ответ на его POST запрос, то IPN он посчитает как Delivered и больше слать его не будет. Остальные пункты автор добавил в todo, спасибо за замечания и плюс в карму.
Я надеюсь вы в курсе про EULA Minecraft'а и то, что далеко не на все в играх можно прикручивать донаты
$Regex = [Regex]::new("of player ([^ ]+)")
$Player = $Regex.Matches($_).value -replace "of player "
if ($true -eq $Regex.Matches($_).Success) {
#обратный вызов стартует тут
}
в PS аж с версии 1.0 есть
if ($_ -match "of player ([^ ]+)") {
$Player = $matches[1]
}
а иначе зачем вообще скобки?
и почему везде Import-Module вместо dotsource?
btw, помимо сказанного другими выше, складывать пути из имени игрока не очень хорошо. Мало ли, сделаю имя "../../ЧТО-НИБУДЬ_НЕХОРОШЕЕ"…
Сейчас самое сложное, увы, не технический прием платежей. А найти агрегатора, находясь в Беларуси... MCDonate и подобные малые позакрывалсь. UnitPay и покрупнее перешли в режим только для граждан РФ. Всяких пейпалов и скриллов у нас не было и врядли когда появятся. DonationAlerts и близкие аналоги любят внезапно банить без объяснения причин.
Не особо надеюсь, но может кто знает хоть какого-то живого платежного агрегатора для мелких донатов?
Как я сделал систему приема платежей в Minecraft на чистом PowerShell